DFS,BFS 알고리즘
DFS,BFS 알고리즘을 자바 소스로 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.top.api;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
class Graph {
class Node {
int data;
LinkedList<Node> adjacent;
boolean marked;
Node(int data) {
this.data = data;
this.marked = false;
this.adjacent = new LinkedList<Node>();
}
}
Node[] nodes;
Graph(int size) {
nodes = new Node[size];
for (int i = 0; i < size; i++) {
nodes[i] = new Node(i);
}
}
// 두 노드의 관계를 저장하는 함수
void addEdge(int l1, int l2) {
Node n1 = nodes[l1];
Node n2 = nodes[l2];
if (!n1.adjacent.contains(n2)) {
n1.adjacent.add(n2);
}
if (!n2.adjacent.contains(n1)) {
n2.adjacent.add(n1);
}
}
void dfs() {
dfs(0);
}
void dfs(int index) {
Node root = nodes[index];
Stack<Node> stack = new Stack<>();
stack.push(root);
root.marked = true;
while (!stack.isEmpty()) {
Node r = stack.pop();
for (Node n : r.adjacent) {
if (!n.marked) {
n.marked = true;
stack.push(n);
}
}
visit(r);
}
}
void bfs() {
bfs(0);
}
void bfs(int index) {
Node root = nodes[index];
Queue<Node> queue = new LinkedList<>();
queue.add(root);
root.marked = true;
while (!queue.isEmpty()) {
Node r = queue.poll();
for (Node n : r.adjacent) {
if (!n.marked) {
n.marked = true;
queue.add(n);
}
}
visit(r);
}
}
void visit(Node r) {
System.out.print(r.data + " ");
}
}
public class test2 {
public static void main(String[] arg) {
Graph g = new Graph(9);
g.addEdge(0, 1);
g.addEdge(1, 2);
g.addEdge(1, 3);
//g.dfs();
g.bfs();
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.