그래프탐색 (graph search) - kocwelearning.kocw.net/kocw/document/2015/yeungnam/kimyoungt... ·...

30
Advanced Networking Tech. Lab. Yeungnam University (yuANTL) Programming Language Prof. Young-Tak Kim ch12 - 44 그래프 탐색 (Graph Search) 그래프의 가장 기본적인 연산 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한번씩 방문 많은 문제들이 단순히 그래프의 노드를 탐색하는 것으로 해결 () 도로망에서 특정 도시에서 다른 도시로 갈 수 있는지 여부 () 전자회로에서 특정 단자와 다른 단자가 서로 연결되어 있는지 여부

Upload: others

Post on 01-Jan-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 44

그래프 탐색 (Graph Search)

그래프의 가장 기본적인 연산하나의 정점으로부터 시작하여 차례대로 모든 정점들을

한번씩 방문많은 문제들이 단순히 그래프의 노드를 탐색하는 것으로 해결

(예) 도로망에서 특정 도시에서 다른 도시로 갈 수 있는지 여부(예) 전자회로에서 특정 단자와 다른 단자가 서로 연결되어 있는지 여부

Page 2: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 45

깊이 우선 탐색(DFS)

깊이 우선 탐색 (DFS: depth-first search) 한 방향으로 갈 수 있을 때까지 가다가 더 이상 갈 수 없게 되면 가장 가까운

갈림길로 돌아와서 이 곳으로부터 다른 방향으로 다시 탐색 진행 되돌아가기 위해서는 스택 필요(순환함수 호출로 묵시적인 스택 이용 가능)

Page 3: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 46

DFS 알고리즘

depth_first_search(v)v를 방문되었다고 표시;for all u ∈ (v에 인접한 정점) do

if (u가 아직 방문되지 않았으면) then depth_first_search(u)

Page 4: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 47

DFS 알고리즘

Page 5: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 48

DFS 프로그램

// 인접 행렬로 표현된 그래프에 대한 깊이 우선 탐색void dfs_mat(GraphType *g, int v){

int w;visited[v] = TRUE; // 정점 v의 방문 표시printf("%d ", v); // 방문한 정점 출력for(w=0; w<g->n; w++) // 인접 정점 탐색

if( g->adj_mat[v][w] && !visited[w] ) dfs_mat(g, w); //정점 w에서 DFS 새로시작}

// 인접 리스트로 표현된 그래프에 대한 깊이 우선 탐색void dfs_list(GraphType *g, int v) {

GraphNode *w;visited[v] = TRUE; // 정점 v의 방문 표시printf("%d ", v); // 방문한 정점 출력for(w=g->adj_list[v]; w; w=w->link) // 인접 정점 탐색

if(!visited[w->vertex]) dfs_list(g, w->vertex); //정점 w->vertex에서 DFS 새로시작}

Page 6: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 49

너비우선 탐색(BFS)

너비 우선 탐색(BFS: breadth-first search) 시작 정점으로부터 가까운 정점을 먼저 방문하고

멀리 떨어져 있는 정점을 나중에 방문하는 순회 방법 큐를 사용하여 구현됨

너비우선탐색 알고리즘

breadth_first_search(v)v를 방문되었다고 표시;큐 Q에 정점 v를 삽입;while (not is_empty(Q)) do

큐 Q에서 정점 w를 삭제;for all u ∈ (w에 인접한 정점) do

if (u가 아직 방문되지 않았으면) then u를 큐 Q에 삽입;u를 방문되었다고 표시;

Page 7: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 50

Page 8: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 51

Page 9: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 52

DFS와 BFS의 C 프로그램 구현

/* Graph.h (5) */

typedef struct Graph{

Vertex **vrtxPtrArr; // vertex arrayEdgeList *adjLstArr; // adjacency list arrayint num_vertices;int **ppDistMtrx;Graph(int num_nodes);

} Graph;

typedef struct DepthFirstSearch{

Graph *pGrp;VertexStatus *pVrtxStatus;EdgeStatus **ppEdgeStatus;DepthFirstSearch(Graph *pGrp);DFS_DONE searchDone;

// used in depth first searchint *pLeastCost;

} DepthFirstSearch;

/* Graph.h (6) */

typedef struct BreathFirstSearch{

Graph *pGrp;VertexStatus *pVrtxStatus;int *pLeastCost;int *pPrev;BFS_PROCSS_STATUS* pBFS_Proc_Stat;BreathFirstSearch(Graph *pGrp);

} BreathFirstSearch;

void bfsTraversal(BreathFirstSearch *pBFS, Vertex *pStart, Vertex *pTarget, VertexList *pVTL);

void dfsTraversal(DepthFirstSearch *pDFS, Vertex *pV, Vertex *pTarget, VertexList *pVTL);

Page 10: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 53

/* Graph.cpp (13) */

DepthFirstSearch::DepthFirstSearch(Graph *pGraph){

int num_nodes;pGrp = pGraph;num_nodes = pGrp->num_vertices;pVrtxStatus = (VertexStatus *)malloc(sizeof(VertexStatus)* num_nodes);for (int i = 0; i < num_nodes; i++){

pVrtxStatus[i] = VRTX_NOT_VISITED;}ppEdgeStatus = (EdgeStatus **)malloc(sizeof(EdgeStatus *)* num_nodes);for (int i = 0; i < num_nodes; i++){

ppEdgeStatus[i] = (EdgeStatus *)malloc(sizeof(EdgeStatus)* num_nodes);}

for (int i = 0; i < num_nodes; i++)for (int j = 0; j < num_nodes; j++){

ppEdgeStatus[i][j] = EDGE_UNEXPLORED;}searchDone = NOT_DONE; // used in depth first search (dfs) traversalpLeastCost = (int *)malloc(sizeof(int)* num_nodes);

}

Page 11: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 54

/* Graph.cpp (14) */

void dfsTraversal(DepthFirstSearch *pDFS, Vertex *pV, Vertex *pTarget, VertexList *pVTL){

int num_nodes = pDFS->pGrp->num_vertices, num_selected = 0;Vertex *pV2;int **distMtrx = pDFS->pGrp->ppDistMtrx;int *pLeastCost = pDFS->pLeastCost;int start_ID, target_ID, cur_ID, vrtx_ID, v2_ID;EdgeList *pEL;EdgeListNode *pELN;Edge *pE;

vrtx_ID = pV->ID;target_ID = pTarget->ID;

pDFS->pGrp->vrtxPtrArr[vrtx_ID]->vtxStatus = VRTX_VISITED;if (vrtx_ID == target_ID){

printf("Depth First Search is done !!₩n");pDFS->searchDone = DONE;

return;}

Page 12: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 55

/* Graph.cpp (15) */

pEL = &(pDFS->pGrp->adjLstArr[vrtx_ID]);pELN = pEL->pFirst;for (int i = 0; (i < pEL->num_edges) & (pDFS->searchDone != DONE); i++){

pE = pELN->pE;if (pE->edgeStatus == EDGE_UNEXPLORED){

pE->edgeStatus = EDGE_VISITED;pV2 = pE->pV2;v2_ID = pV2->ID;if (pV2->vtxStatus != VRTX_VISITED){

listPushBack(pVTL, pV2);pDFS->ppEdgeStatus[vrtx_ID][v2_ID] = DISCOVERY;if (pDFS->searchDone != DONE){

dfsTraversal(pDFS, pV2, pTarget, pVTL);if (pDFS->searchDone != DONE){

Vertex *pLast_pushed = pVTL->pLast->pV;listPopBack(pVTL);

}}

} else { // V2 has been visited alreadypE->edgeStatus = BACK;

}} // end ifpELN = pELN->pNext;

} // end for}

Page 13: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 56

/* Graph.cpp (16) */

BreathFirstSearch::BreathFirstSearch(Graph *pGraph){

pGrp = pGraph;int num_nodes = pGrp->num_vertices;pPrev = (int *)malloc(sizeof(int)* num_nodes);pLeastCost = (int *)malloc(sizeof(int)* num_nodes);pBFS_Proc_Stat = (BFS_PROCSS_STATUS*)malloc(sizeof(BFS_PROCSS_STATUS)* num_nodes);

}void bfsTraversal(BreathFirstSearch *pBFS, Vertex *pStart, Vertex *pTarget, VertexList *pVTL){

int num_nodes = pBFS->pGrp->num_vertices, num_selected = 0;Vertex *pVrtx;int *pLeastCost = pBFS->pLeastCost;int **distMtrx = pBFS->pGrp->ppDistMtrx;int *pPrev = pBFS->pPrev;BFS_PROCSS_STATUS *pBFS_Proc_Stat = pBFS->pBFS_Proc_Stat;int start_vrtxID, target_vrtxID, cur_vrtxID, vrtxID;int round, minID, minCost;

start_vrtxID = pStart->ID;target_vrtxID = pTarget->ID;/* initialize L(n) = w(start, n) */for (int i = 0; i < num_nodes; i++){

pLeastCost[i] = distMtrx[start_vrtxID][i];pPrev[i] = start_vrtxID;pBFS_Proc_Stat[i] = NOT_SELECTED;

}pBFS_Proc_Stat[start_vrtxID] = SELECTED;num_selected = 1;

Page 14: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 57

/* Graph.cpp (17) */

round = 0;printf("Breadth First Search ...₩n");printDist(pBFS->pGrp->num_vertices, pBFS->pLeastCost, round);while (num_selected < num_nodes){

round++;//printf("round (%2d) : ", round);

// find cur_node with least costminID = -1;minCost = PLUS_INF;for (int i = 0; i < num_nodes; i++){

if ((pLeastCost[i] < minCost) & (pBFS_Proc_Stat[i] != SELECTED)){

minID = i;minCost = pLeastCost[i];

}}if (minID == -1){

printf("Error in FindShortestPath with bfsTraversal()₩n");printf(" ==> Target is not connected to the start !!₩n");break;

} else {

Page 15: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 58

/* Graph.cpp (17) */

pBFS_Proc_Stat[minID] = SELECTED;num_selected++;if (minID == target_vrtxID) // target reached{

printf(" ==> reached to the target node (%2d) at ", target_vrtxID);printf(" least cost = %d₩n", minCost);vrtxID = minID;do {

pVrtx = pBFS->pGrp->vrtxPtrArr[vrtxID];VertexListNode *pVLN = (VertexListNode *)malloc(sizeof(VertexListNode));pVLN->pV = pVrtx;pVLN->pNext = pVLN->pPrev = NULL;if (pVTL->num_vertices == 0){

pVTL->pFirst = pVTL->pLast = pVLN;pVTL->num_vertices++;

} else {pVLN->pNext = pVTL->pFirst;pVTL->pFirst->pPrev = pVLN;pVTL->pFirst = pVLN;pVTL->num_vertices++;

}vrtxID = pPrev[vrtxID];

} while (vrtxID != start_vrtxID);

Page 16: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 59

/* Graph.cpp (17) */

pVrtx = pBFS->pGrp->vrtxPtrArr[vrtxID]; // push start node at the front of pathVertexListNode *pVLN = (VertexListNode *)malloc(sizeof(VertexListNode));pVLN->pV = pVrtx;pVLN->pNext = pVTL->pFirst;

pVLN->pPrev = NULL;pVTL->pFirst = pVLN;pVTL->num_vertices++;break;

} // end if (minID == target_vrtxID)} // end if-else

int pLS, distMtrx_i;for (int i = 0; i < num_nodes; i++){

pLS = pLeastCost[i];distMtrx_i = distMtrx[minID][i];if ((pBFS_Proc_Stat[i] != SELECTED) & (pLeastCost[i] > (pLeastCost[minID] + distMtrx[minID][i]))){// update distances with relaxation

pPrev[i] = minID;pLeastCost[i] = pLeastCost[minID] + distMtrx[minID][i];

}}

// printout the pLeastCost[] for debuggingprintDist(pBFS->pGrp->num_vertices, pBFS->pLeastCost, round);

} // end whilefree(pLeastCost);free(pPrev);

}

Page 17: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 60

/* main.cpp (3) */

// Depth First Searchprintf("₩nDepth First Search (DFS) ...₩n");VertexList vtl_1;initList(&vtl_1);DepthFirstSearch dfs(&grph);listPushBack(&vtl_1, pStart);dfsTraversal(&dfs, pStart, pTarget, &vtl_1);printf("DFS::Path from start (%2d) to target (%2d):₩n ", pStart->ID, pTarget->ID);printList(&vtl_1);

// Breadth First Searchprintf("₩nBreadth First Search (BFS) ...₩n");VertexList vtl_2;initList(&vtl_2);BreathFirstSearch bfs(&grph);bfsTraversal(&bfs, pStart, pTarget, &vtl_2);printf("ShortestPath::Path from start (%2d) to target (%2d):₩n ", pStart->ID, pTarget->ID);printList(&vtl_2);

}

Page 18: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 61

미로 (Maze) 찾기

Graph representation for Maze vertex: cross point edge: distance between the cross points

0 1 2

0

1

2

v0

(start)

v1 v2

v3 v4 v5

v6 v7 v8

(end)

Page 19: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 62

Page 20: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 63

0 1 2

0

1

2

v0

(start)

v1 v2

v3 v4 v5

v6 v7 v8

(end)

0 1 2

0

1

2

v0

(start)

v1 v2

v3 v4 v5

v6 v7 v8

(end)

34

3

4

Page 21: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 64

5 x 5 미로 (Maze) 찾기

Find the shortest path from v0 (start) to v20 (end)

v0 ~ v24: cross pointsdistance(v0, v1): 1distance(v0, v5): 1

distance(v2, v3): +

0 1 2 3 4

0

1

2

3

4

v0

v24

(start)

(end)

v4

v20

v1 v2 v3

v5 v6 v7 v8 v9

v10 v11 v12 v13 v14

v15 v16 v17 v18 v19

v21 v22 v23

Page 22: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 65

5x5 미로 (Maze) 찾기

Depth First Search example

v0 ~ v24: cross pointsdistance(v0, v1): 1distance(v0, v5): 1

distance(v2, v3): +

0 1 2 3 4

0

1

2

3

4

v0

v24

(start)

(end)

v4

v20

v1 v2 v3

v5 v6 v7 v8 v9

v10 v11 v12 v13 v14

v15 v16 v17 v18 v19

v21 v22 v23

Tracking Back Tracking

Page 23: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 66

5x5 미로 (Maze) 찾기

Breadth First Search example

v0 ~ v24: cross pointsdistance(v0, v1): 1distance(v0, v5): 1

distance(v2, v3): +

0 1 2 3 4

0

1

2

3

4

v0

v24

(start)

(end)

v4

v20

v1 v2 v3

v5 v6 v7 v8 v9

v10 v11 v12 v13 v14

v15 v16 v17 v18 v19

v21 v22 v23

Tracking

Page 24: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 67

미로 (Maze) 찾기 결과

Sample routes to target (v0 v20)

0 1 2 3 4

0

1

2

3

4

v0

v24

(start)

(end)

v4

v20

v1 v2 v3

v5 v6 v7 v8 v9

v10 v11 v12 v13 v14

v15 v16 v17 v18 v19

v21 v22 v23

Path by obtained by Depth First Search

Path by obtained by Breadth First Search

Page 25: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 68

IP Packet Router의 Forwarding Table 작성

Input network topology (USA)

0

1

2

5

7

8

6

9

12

1314

19

18

17

16

10

15

11

3

820

1144

828

Seattle

San Francisco

Salt Lake City

Los Angels

Denver

Phoenix

Houston

Dallas

Minneapolis

Chicago

St. Louis

Memphis

New Orleans

Atlanta

Miami

Washington D.C.

Detroit

New York

Boston

745

380 688

381

816

1067

920

861

780

521

409

297286

845

285

454

246352

393

394

473

861

661

632

534

640

834211

237

4

Rapid city611

657

389

Page 26: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 69

Depth First Search example Find a path from Seattle to Miami

0

1

2

5

7

8

6

9

12

1314

19

18

17

16

10

15

11

3

820

1144

828

Seattle

San Francisco

Salt Lake City

Los Angels

Denver

Phoenix

Houston

Dallas

Minneapolis

Chicago

St. Louis

Memphis

New Orleans

Atlanta

Miami

Washington D.C.

Detroit

New York

Boston

745

380 688

381

816

1067

920

861

780

521

409

297286

845

285

454

246352

393

394

473

861

661

632

534

640

834211

237

4

Rapid city611

657

389

Tracking Back Tracking

Page 27: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 70

Breadth First Search example Find the shortest path from Seattle to Miami

0

1

2

5

7

8

6

9

12

1314

19

18

17

16

10

15

11

3

820

1144

828

Seattle

San Francisco

Salt Lake City

Los Angels

Denver

Phoenix

Houston

Dallas

Minneapolis

Chicago

St. Louis

Memphis

New Orleans

Atlanta

Miami

Washington D.C.

Detroit

New York

Boston

745

380 688

381

816

1067

920

861

780

521

409

297286

845

285

454

246352

393

394

473

861

661

632

534

640

834211

237

4

Rapid city611

657

389

Page 28: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 71

경로 찾기

Path (0 15) produced by Depth First Search (DFS)

Path by obtained by Depth First Search

Path by obtained by Breadth First Search

Page 29: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 72

Homework 12

12.1 미로 찾기(1) 다음과 같은 미로에서 임의의 시작점 (예: v0)에서 임의의 종단점 (예: v24)까지의

경로를 찾기 위한 Graph 프로그램을 작성하고, printGraph() 함수를 사용하여, 그래프 정보를 출력하라.

(2) 시작점 (v0)에서 종단점 (v24)까지의 경로를 DFS (Depth First Search) 알고리즘으로 찾는 프로그램을 작성하고, 결과 경로를 출력하라.

(3) 시작점 (v0)에서 종단점 (v24)까지의 경로를 BFS (Breadth First Search) 알고리즘으로 찾는 프로그램을 작성하고, 결과 경로를 출력하라.

v0 ~ v24: cross pointsdistance(v0, v1): 1distance(v0, v5): 1

distance(v2, v3): +

0 1 2 3 4

0

1

2

3

4

v0

v24

(start)

(end)

v4

v20

v1 v2 v3

v5 v6 v7 v8 v9

v10 v11 v12 v13 v14

v15 v16 v17 v18 v19

v21 v22 v23

Page 30: 그래프탐색 (Graph Search) - KOCWelearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 73

12.2 Forwarding Table 구성(1) 다음과 같은 네트워크에서 Graph BFS 탐색 알고리즘을 실행할 수

있도록 Graph 프로그램을 작성하라.(2) 이 Graph 프로그램에서 임의의 노드로 부터 다른 모든 노드로 최소 비용

경로를 통하여 갈 수 있는 경로들을 BFS 알고리즘을 찾는 프로그램을작성하라.

(3) 임의의 지정된 노드로 부터, 다른 모든 노드로의 최소 비용 경로를 산출한 후, 해당 목적지로 전달되어야 하는 패킷의 next hop을 나타내는forwarding table을 출력하는 프로그램을 작성하라.