Step 3: 최상단 Node에 방문하지 않은 인접 Node가 있다면 그 Node를 Stack에 넣고 방문 처리
☞ 방문하지 않은 인접 Node가 없으면 Stack에서 최상단 Node 삭제
Step 4: Step 2로 이동
Code
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
#define MAX 7
int visited[7];
vector <int> a[8];
void dfs(int x){
// 이미 방문한 적 있으면 return
if(visited[x]) return;
// 방문 처리
visited[x] = true;
cout << x << " ";
// 인접 노드 방문
for(int i=0;i<a[x].size();i++){
int y = a[x][i];
dfs(y);
}
}
int main(void){
a[1].push_back(2);
a[1].push_back(3);
a[2].push_back(1);
a[2].push_back(3);
a[2].push_back(4);
a[2].push_back(5);
a[3].push_back(1);
a[3].push_back(2);
a[3].push_back(6);
a[3].push_back(7);
a[4].push_back(2);
a[4].push_back(5);
a[5].push_back(2);
a[5].push_back(4);
a[6].push_back(3);
a[6].push_back(7);
a[7].push_back(3);
a[7].push_back(6);
dfs(1);
}