ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘...105
    일지 2022. 1. 20. 17:19

    너비 우선 탐색과 깊이 우선 탐색

    그래프에서 모든 정점을 탐색하는 방법에는 레벨의 모든 노드를 방문하는 것을 우선하는 너비 우선 탐색(Breath First Search)과 루트에서부터 한 방향으로 리프 노드가 나올 때까지 진행하는 깊이 우선 탐색(Depth First Search)이 존재한다.

     

    쉽게 배우는 알고리즘 그래프 그림 9-11

     

    너비 우선 탐색 알고리즘

    너비 우선 탐색은 먼저 방문한 노드를 먼저 처리하는 FIFO 방식이므로 Queue를 사용한다.

     

    BFS 알고리즘

    BFS(G, s)
    {
    	for each v ∈ V - {s}
    	{
    		visited[v] ← NO;
    	}
    
    	visited[s] ← YES;
    	enqueue(Q, s);
    
    	while (Q ≠ ∮)
    	{
    		u ← dequeue(Q);
    		for each v ∈ L(u)
    		{
    			if (visited[v] = NO) then
    			{
    				visited[v] ← YES;
    				enqueue(Q, v);
    			}
    		}
    	}
    }

     

    깊이 우선 탐색 알고리즘

    깊이 우선 탐색은 나중에 방문한 노드를 먼저 처리하는 LIFO 방식이므로 Stack을 사용한다.

     

    DFS 알고리즘

    DFS(G, s)
    {
    	for each v ∈ V - {s}
    	{
    		visited[v] ← NO;
    	}
    
    	for each v ∈ V - {s}
    	{
    		if (visited[v] = NO) then
    		{
    			aDFS(v);
    		}
    	}
    }
    
    aDFS(v)
    {
    	visited[s] ← YES;
    	for each v ∈ L(u)
    	{
    		if (visited[v] = NO) then
    		{
    			aDFS(v);
    		}
    	}
    }

     

    댓글

Designed by Tistory.