: ๋ฃจํธ ๋
ธ๋(ํน์ ๋ค๋ฅธ ์์์ ๋
ธ๋)์์ ์์ํด์ ๋ค์ ๋ถ๊ธฐ(branch)๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ๋ฒ
public class DFSGraph {
private int V; // ๋
ธ๋์ ๊ฐ์
private LinkedList<Integer> adj[]; // ์ธ์ ๋ฆฌ์คํธ
/* ์์ฑ์ */
public DFSGraph(int v) {
V = v;
adj = new LinkedList[v];
for (int i = 0; i < v; ++i) // ์ธ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
adj[i] = new LinkedList();
}
/* ๋
ธ๋๋ฅผ ์ฐ๊ฒฐ */
void addEdge(int v, int w) {
adj[v].add(w);
}
/* DFS์ ์ํด ์ฌ์ฉ๋๋ ํจ์ */
void DFSUtil(int v, boolean visited[]) {
// ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๊ฑฐ์น๋ก ํ์ํ๊ณ ๊ฐ์ ์ถ๋ ฅ
visited[v] = true;
System.out.print(v + " ");
// ๋ฐฉ๋ฌธํ ๋
ธ๋์์ธ์ ํ ๋ชจ๋ ๋
ธ๋๋ฅผ ๊ฐ์ ธ์จ๋ค
Iterator<Integer> i = adj[v].listIterator();
while (i.hasNext()) {
int n = i.next();
// ๋ฐฉ๋ฌธํ์ง ์๋ ๋
ธ๋๋ฉด ํด๋น ๋
ธ๋๋ฅผ ์์ ๋
ธ๋๋ก ๋ค์ DFSUtil ํธ์ถ
if (!visited[n])
DFSUtil(n, visited);// ์ํ ํธ์ถ
}
}
void DFS(int v) {
// ๋
ธ๋์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ๋จ
boolean visited[] = new boolean[V];
// ๋น์ฐ๊ฒฐํ ๊ทธ๋ํ์ ๊ฒฝ์ฐ, ๋ชจ๋ ์ ์ ์ ํ๋์ฉ ๋ฐฉ๋ฌธ
for (int i = 0; i < V ; ++i) {
if (visited[i] == false)
DFSUtil(i, visited);
}
}
public static void main(String args[]) {
DFSGraph g = new DFSGraph(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
System.out.println("vertax 2์์ ์์ํ๋ DFS(๊น์ด ์ฐ์ ํ์)");
g.DFS(2); /* ์ฃผ์ด์ง ๋
ธ๋๋ฅผ ์์ ๋
ธ๋๋ก DFS ํ์ */
// 0 1 2 3
// g.DFS(); /* ๋น์ฐ๊ฒฐํ ๊ทธ๋ํ์ ๊ฒฝ์ฐ */
}
}