관리 메뉴

Try

[알고리즘/자료구조] BFS, 넓이우선탐색 (Breadth First Search) 본문

Algorithm/Algorithm 응용

[알고리즘/자료구조] BFS, 넓이우선탐색 (Breadth First Search)

HAS3ONG 2018. 12. 11. 20:42

넓이우선탐색 (BFS, Breadth First Search)


너비 우선 탐색(Breadth-first search, BFS)은 맹목적 탐색방법의 하나로 시작 정점을 방문한 후 시작 정점에 인접한 모든 정점들을 우선 방문하는 방법이다. 더 이상 방문하지 않은 정점이 없을 때까지 방문하지 않은 모든 정점들에 대해서도 너비 우선 검색을 적용한다. OPEN List 는 큐를 사용해야만 레벨 순서대로 접근이 가능하다.






https://has3ong.tistory.com/54

Graph 소스 가져왔습니다.


소스



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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*    
/*    khsh5592@naver.com
/*    has3ong.tistory.com
/*    
/*    2018 - 12 - 11
/*
*/
 
#include "graph.h"
 
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <queue>
 
using namespace std;
 
void initialize(Graph* G)
{
    Vertex* vertex0 = vertex_Create(00);
    Vertex* vertex1 = vertex_Create(11);
    Vertex* vertex2 = vertex_Create(22);
    Vertex* vertex3 = vertex_Create(33);
    Vertex* vertex4 = vertex_Create(44);
    Vertex* vertex5 = vertex_Create(55);
    Vertex* vertex6 = vertex_Create(66);
    Vertex* vertex7 = vertex_Create(77);
 
    add_Vertex(G, vertex0);
    add_Vertex(G, vertex1);
    add_Vertex(G, vertex2);
    add_Vertex(G, vertex3);
    add_Vertex(G, vertex4);
    add_Vertex(G, vertex5);
    add_Vertex(G, vertex6);
    add_Vertex(G, vertex7);
 
    Edge* edge0 = edge_Create(vertex0, vertex1, 0);
    Edge* edge1 = edge_Create(vertex0, vertex5, 0);
    Edge* edge2 = edge_Create(vertex0, vertex7, 0);
 
    Edge* edge3 = edge_Create(vertex1, vertex0, 0);
    Edge* edge4 = edge_Create(vertex1, vertex4, 0);
    Edge* edge5 = edge_Create(vertex1, vertex6, 0);
 
    Edge* edge6 = edge_Create(vertex2, vertex3, 0);
    Edge* edge7 = edge_Create(vertex2, vertex4, 0);
    Edge* edge8 = edge_Create(vertex2, vertex7, 0);
 
    Edge* edge9 = edge_Create(vertex3, vertex2, 0);
    Edge* edge10 = edge_Create(vertex3, vertex5, 0);
    Edge* edge11 = edge_Create(vertex3, vertex6, 0);
 
    Edge* edge12 = edge_Create(vertex4, vertex1, 0);
    Edge* edge13 = edge_Create(vertex4, vertex2, 0);
 
    Edge* edge14 = edge_Create(vertex5, vertex0, 0);
    Edge* edge15 = edge_Create(vertex5, vertex3, 0);
 
    Edge* edge16 = edge_Create(vertex6, vertex1, 0);
    Edge* edge17 = edge_Create(vertex6, vertex3, 0);
 
    Edge* edge18 = edge_Create(vertex7, vertex0, 0);
    Edge* edge19 = edge_Create(vertex7, vertex2, 0);
 
    add_Edge(vertex0, edge0);
    add_Edge(vertex0, edge1);
    add_Edge(vertex0, edge2);
    add_Edge(vertex1, edge3);
    add_Edge(vertex1, edge4);
    add_Edge(vertex1, edge5);
    add_Edge(vertex2, edge6);
    add_Edge(vertex2, edge7);
    add_Edge(vertex2, edge8);
    add_Edge(vertex3, edge9);
    add_Edge(vertex3, edge10);
    add_Edge(vertex3, edge11);
    add_Edge(vertex4, edge12);
    add_Edge(vertex4, edge13);
    add_Edge(vertex5, edge14);
    add_Edge(vertex5, edge15);
    add_Edge(vertex6, edge16);
    add_Edge(vertex6, edge17);
    add_Edge(vertex7, edge18);
    add_Edge(vertex7, edge19);
}
 
void BFS(Vertex* V)
{
    queue<Vertex*>Q;
    
    Edge* E = NULL;
 
    V -> visit = true;
    E = V -> edge_list;
    cout << " " << V -> index;
    Q.push(V);
 
    while(!Q.empty())
    {
        V = Q.front();
        Q.pop();
 
        E = V -> edge_list;
        
        while ( E != NULL)
        {
            V = E -> to;
            if ( V != NULL && V -> visit == false)
            {
                cout << " " << V -> index;
                V -> visit = true;
                Q.push(V);
            }
 
            E = E -> next;
        }
    }
}
 
void main()
{
    Graph* BFS_G = new Graph();
    Vertex* BFS_V = new Vertex();
 
    initialize(BFS_G);
 
    BFS_V = BFS_G -> Vertex_list;
 
    BFS(BFS_V);
    getch();
}
cs



결과화면



출처

위키피디아

https://en.wikipedia.org/wiki/Breadth-first_search

Comments