티스토리 뷰

Coding/acmicpc

백준 11403:경로찾기

이끼대백과 2018. 3. 14. 17:04

백준 11403 경로찾기 문제입니다.


이번 문제의 알고리즘은 만약 A->B->C->D 그래프가 있다면 A에서 D로 갈 수 있다는 것을 확인하면 되는데요, 이것을 확인하기 위해서 범위를 점점 좁혀가면서 탐색을 하는 방법으로 코딩하였습니다.

예를 들면 A->D로 이동할 수 있다면 B->D로 이동할 수 있는지 확인하면되고 또 이것을 확인하려면 C->D로 이동가능한지 확인하면 됩니다! 결과적으로 A->D로 이동할 수 있다는 결론이 나와요!


밑에는 제 코드입니다.

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
#include <stdio.h>
#include <stdbool.h>
 
#define MAX 20005
 
int G[MAX][MAX];
bool visited[MAX];
int N;
 
bool dfs(int cur, int target) {
    visited[cur] = true;
    if (G[cur][target]) {  //현재위치에서 목표점까지 갈 수 있으면
        return true;       //true 리턴
    }
    else {
        for (int i = 0; i < N; i++) {
            if (G[cur][i] && !visited[i]) {  //i로의 길이 있고, 방문하지 않았으면
                if (dfs(i, target)) {        //i에서 목표점으로의 탐색
                    return true;             //갈 수 있다면 결과적으로 true리턴
                }
            }
        }
        return false;  //탐색이 끝나고도 target으로 갈 수 없다면 false리턴
    }
}
 
int main(void) {
    scanf("%d"&N);
    for (int r = 0; r < N; r++) {
        for (int c = 0; c < N; c++) {
            int way;
            scanf("%d"&way);
            G[r][c] = way;
        }
    }
 
    for (int r = 0; r < N; r++) {
        for (int c = 0; c < N; c++) {
            if (dfs(r, c)) {
                fputs("1 ", stdout);
            }
            else {
                fputs("0 ", stdout);
            }
            for (int i = 0; i < N; i++) {
                visited[i] = false;
            }
        }
        puts("");
    }
 
    return 0;
}
cs



'Coding > acmicpc' 카테고리의 다른 글

백준 2644:촌수계산  (0) 2018.03.19
백준 1707:이분 그래프  (0) 2018.03.18
백준 2178:미로 탐색  (0) 2018.03.13
백준 9466:텀 프로젝트  (4) 2018.03.09
백준 1743:음식물 피하기  (0) 2018.02.28
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/01   »
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
글 보관함