#include <iostream>
#include <vector>
using namespace std;
// index 0은 사용하지 않음으로 배열을 하나 더 추가
bool visited[9];
vector<int> graph[9];
void dfs(int x)
{
visited[x] = true;
cout << x << " ";
for (int i = 0; i < graph[x].size(); i++) // 인접한 노드 사이즈만큼 탐색
{
int y = graph[x][i];
if (!visited[y]) // 방문하지 않았으면 즉 visited가 False일 때 not을 해주면 True가 되므로 아래 dfs 실행
dfs(y); // 재귀적으로 방문
}
}
int main(void)
{
/* 위 그래프와 동일하게 정의 */
graph[1].push_back(2);
graph[1].push_back(3);
graph[1].push_back(8);
graph[2].push_back(1);
graph[2].push_back(7);
graph[3].push_back(1);
graph[3].push_back(4);
graph[3].push_back(5);
graph[4].push_back(3);
graph[4].push_back(5);
graph[5].push_back(3);
graph[5].push_back(4);
graph[6].push_back(7);
graph[7].push_back(2);
graph[7].push_back(6);
graph[7].push_back(8);
graph[8].push_back(1);
graph[8].push_back(7);
dfs(1);
}
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;
unordered_map<char, vector<char>> adjList;//인접리스트(노드, 연결되어있는 노드 배열)
vector<char> result;
unordered_set<char> visited;
void dfs(char node){
visited.insert(node);//방문한 노드 체크
result.push_back(node);
for(char neighbor: adjList[node]){
if(visited.find(neighbor) == visited.end()){//만약 방문한 적이 없다면 dfs
dfs(neighbor);
}
}
}
장점
단점