CH07 Recursive, Tree, Graph(DFS, BFS 기초)
Last updated
Last updated
package 재귀.main1;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
recursive(scanner.nextInt());
}
public static void recursive(int n) {
if (n == 0) {
return;
} else {
recursive(n - 1);
System.out.print(n + " ");
}
}
}
package 재귀.main2;
import java.util.Scanner;
public class Main {
private static void recursive(int n) {
if (n == 0) {
return;
} else {
recursive(n / 2);
System.out.print(n % 2);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
recursive(n);
}
}
package 재귀.main3;
import java.util.Scanner;
public class Main {
private static int recursive(int n) {
if (n == 0) {
return 1;
} else {
return n * recursive(n - 1);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int result = recursive(n);
System.out.println(result);
}
}
package 재귀.main4;
import java.util.Scanner;
public class Main {
private static int recursive(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return recursive(n - 1) + recursive(n - 2);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 1; i <= n; i++) {
System.out.print(recursive(i) + " ");
}
}
}
package 재귀.main4;
import java.util.Scanner;
public class Main {
static int[] fibo;
private static int recursive(int n) {
if (n == 1 || n == 2) {
fibo[n] = 1;
return 1;
} else {
if (fibo[n] != 0) {
return fibo[n];
} else {
fibo[n] = recursive(n - 1) + recursive(n - 2);
return fibo[n];
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
fibo = new int[n + 1];
recursive(n);
for (int i = 1; i <= n; i++) {
System.out.print(fibo[i] + " ");
}
}
}
package 재귀.main5;
class Node {
int data;
Node lt;
Node rt;
public Node(int data) {
this.data = data;
}
}
public class Main {
Node root;
public void DFS(Node root) {
if (root == null) return;
else {
System.out.print(root.data + " ");
DFS(root.lt);
DFS(root.rt);
}
}
public static void main(String[] args) {
Main tree = new Main();
tree.root = new Node(1);
tree.root.lt = new Node(2);
tree.root.rt = new Node(3);
tree.root.lt.lt = new Node(4);
tree.root.lt.rt = new Node(5);
tree.root.rt.lt = new Node(6);
tree.root.rt.rt = new Node(7);
tree.DFS(tree.root);
}
}
package 재귀.main6;
import java.util.LinkedList;
import java.util.Queue;
class Node {
int data;
Node lt;
Node rt;
public Node(int data) {
this.data = data;
}
}
public class Main {
Node root;
public void BFS(Node root) {
Queue<Node> Q = new LinkedList<>();
Q.offer(root);
while (!Q.isEmpty()) {
int len = Q.size();
for (int i = 0; i < len; i++) {
Node current = Q.poll();
System.out.print(current.data + " ");
if (current.lt != null) {
Q.offer(current.lt);
}
if (current.rt != null) {
Q.offer(current.rt);
}
}
System.out.println();
}
}
public static void main(String[] args) {
Main tree = new Main();
tree.root = new Node(1);
tree.root.lt = new Node(2);
tree.root.rt = new Node(3);
tree.root.lt.lt = new Node(4);
tree.root.lt.rt = new Node(5);
tree.root.rt.lt = new Node(6);
tree.root.rt.rt = new Node(7);
tree.BFS(tree.root);
}
}
package 재귀.main8;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
int answer = 0;
int[] dis = {1, -1, 5};
int[] ch;
Queue<Integer> Q = new LinkedList<>();
public int BFS(int s, int e) {
ch = new int[10001];
ch[s] = 1;
Q.offer(s);
int L = 0;
while (!Q.isEmpty()) {
int len = Q.size();
for (int i = 0; i < len; i++) {
int x = Q.poll();
if (x == e) {
return L;
}
for (int j = 0; j < 3; j++) {
int nx = x + dis[j];
if (nx >= 1 && nx <= 10000 && ch[nx] == 0) {
ch[nx] = 1;
Q.offer(nx);
}
}
}
L++;
}
return 0;
}
public static void main(String[] args) {
Main T = new Main();
Scanner scanner = new Scanner(System.in);
int s = scanner.nextInt();
int e = scanner.nextInt();
System.out.println(T.BFS(s, e));
}
}
package 재귀.main9;
import java.util.LinkedList;
import java.util.Queue;
class Node {
int data;
Node lt;
Node rt;
public Node(int data) {
this.data = data;
}
}
public class Main {
Node root;
public int BFS(Node root) {
Queue<Node> Q = new LinkedList<>();
Q.offer(root);
int L = 0;
while (!Q.isEmpty()) {
int length = Q.size();
for (int i = 0; i < length; i++) {
Node current = Q.poll();
if (current.lt == null && current.rt == null) {
return L;
}
if (current.lt != null) {
Q.offer(current.lt);
}
if (current.rt != null) {
Q.offer(current.rt);
}
}
L++;
}
return 0;
}
public static void main(String[] args) {
Main tree = new Main();
tree.root = new Node(1);
tree.root.lt = new Node(2);
tree.root.rt = new Node(3);
tree.root.lt.lt = new Node(4);
tree.root.lt.rt = new Node(5);
int result = tree.BFS(tree.root);
System.out.println(result);
}
}