coding test - C++/기본기문제
[C++] 경로 탐색 (DFS)
sillon
2026. 9. 28. 23:43
728x90
반응형

// 64번 경로 탐색
#include <vector>
#include <string>
#include <iostream>
using namespace std;
// 정점의 수 N
int N = 5;
// 간선의 수 M
int M = 9;
vector<vector<int>> line = {
{1, 2},
{1, 3},
{1, 4},
{2, 1},
{2, 3},
{2, 5},
{3, 4},
{4, 2},
{4, 5}
};
vector<vector<int>> graph(N+1,vector<int>(N+1,0));
// 1번에서 5번 까지만 가면 됨ㅇㅇ
int answer = 0;
vector<int> tmp;
void DFS(int L,vector<int> visited){
if (L == N){
answer += 1;
return;
}
for(int i = 1; i < N+1; i++){
if (graph[L][i] == 1 && visited[i] == 0){
visited[i] = 1;
DFS(i,visited);
visited[i] = 0;
}
}
}
int main(){
for(auto l : line){
int a = l.front();
int b = l.back();
graph[a][b] = 1;
}
vector<int> visited(N+1,0);
visited[0] = 1;
visited[1] = 1;
for (int i = 1; i < N+1; i++){
if (graph[1][i] == 1 && visited[i] == 0){
visited[i] = 1;
DFS(i,visited);
visited[i] = 0;
}
}
cout << answer;
return 0;
}
양방향인지 단방향인지 확인 주의할것
그래프는 대부분 인접행렬로 풀어서 풀면 쉽게 풀린다.
728x90
반응형