코드


#include <iostream>
#include <vector>

using namespace std;

/* 그래프 => 총 노드의 수: 9 (0 포함)*/
bool visited[9]; // 방문 체크
vector<int> graph[9]; // 그래프

void dfs(int node)
{
    // 방문한 노드라면: 나가기
    if(visited[node]) return;

    // 방문표시, 출력
    visited[node] = true;
	printf("%d ", node);

    // 인접한 노드 탐색
	for (int i = 0; i < graph[node].size(); i++){
		int link = graph[node][i];
        
        dfs(link); 
	}
}

int main(void)
{
    /* 그래프 정의 */
    graph[0].push_back(1);

    graph[1].push_back(0);
    graph[1].push_back(2);
    graph[1].push_back(3);

    graph[2].push_back(1);
    graph[2].push_back(4);

    graph[3].push_back(1);
    graph[3].push_back(2);
    graph[3].push_back(4);
    graph[3].push_back(5);

    graph[4].push_back(2);
    graph[4].push_back(3);

    graph[5].push_back(3);
    graph[5].push_back(6);
    graph[5].push_back(7);

    graph[6].push_back(5);
    graph[6].push_back(8);

    graph[7].push_back(5);

    graph[8].push_back(6);

    dfs(0);
}

풀이


DFS(깊이 우선 탐색)

한우물을 파다가 끝이 보이면 지나왔던 길중 샛길로 빠지고 다시 그 곳을 판다 

 

dfs()설명: (방문 체크 -> 출력 -> 인접노드 탐색)

1. 방문한 노드인지 확인 (visited 이용) 

1-1. 방문한 노드라면 나가기

1-2. 방문 안한 노드라면 방문표시

2. 해당 노드를 출력 (출력뿐만 아니라 필요에 따라 다른 작업을 할 수도 있다)

3. 인접노드 탐색

'알고리즘 > 그래프' 카테고리의 다른 글

플로이드 와샬(Floyd Warshall)  (0) 2022.02.09
너비 우선 탐색(BFS : Breadth First Search)  (0) 2022.01.28

+ Recent posts