포스트

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 라이센스를 따릅니다.