-

[DFS] 백준 11403번 - 경로 찾기 (정답률 51%) 본문

3. DFS & 백트래킹

[DFS] 백준 11403번 - 경로 찾기 (정답률 51%)

asdklfjlasdlfkj 2020. 1. 7. 11:08

https://www.acmicpc.net/problem/11403

 

11403번: 경로 찾기

가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.

www.acmicpc.net

백준 DFS 연습 문제이다.

최근 문제풀면서 DFS에 대한 응용력이 부족한것같아 풀어보았다.

원리와 성격을 알지만 응용을 잘 할 수 있게 지속적으로 연습하자.

 

이 문제는 각 정점에서 다른 정점으로 갈 수 있는 경로가 있다면 1, 아니면 0을 N x N 행렬에 저장해 출력하라는 문제다. 모든 정점 쌍에 대해 dfs 탐색을 하면 시간 초과가 뜨지만, 한 정점에서 갈 수 있는 모든 점들을 찾으면 그 점들에 갈 수 있는 경로가 있다는 뜻이므로 실제로 dfs 탐색을 N^2 할 필요가 없이 N 개의 정점을 시작점으로 하여 dfs 탐색을 하면 된다.

 

아래는 소스코드. (4ms)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#define maxlen 101
using namespace std;
int N;
int Dir_Graph[maxlen][maxlen];
bool check[maxlen];
int Answer[maxlen][maxlen];
int SV;
// 점은 1~100 인덱스 유효.
 
void falsing(){
    for (int i = 1; i <= N; i++)
        check[i] = false;
}
 
void toAnswer(){
    for (int i = 1; i <= N; i++){
        if (check[i])
            Answer[SV][i] = 1;
        else
            Answer[SV][i] = 0;
        check[i] = false;
    }
}
 
void dfs(int curpos){
    for (int i = 1; i <= N; i++){
        if (!check[i] && Dir_Graph[curpos][i]){
            check[i] = true;
            dfs(i);
        }
    }
}
 
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
 
    cin >> N;
    for (int i = 1; i <= N; i++){
        for (int j = 1; j <= N; j++){
            cin >> Dir_Graph[i][j];
        }
    }
    falsing();
    // 각 행별로 시작정점을 잡고, 그 정점에서 dfs탐색을 해서 갈 수 있었던 점들 모두 true.
    for (int start_virtex = 1; start_virtex <= N; start_virtex++){
        SV = start_virtex;
        dfs(SV);
        toAnswer();
        for (int i = 1; i <= N; i++)
            cout << Answer[start_virtex][i] << " ";
        cout << '\n';
    }
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

Comments