본문 바로가기

Algorithm/Data Structure

[KOI] 1999년 중등부 1번 촌수계산

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

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
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define MAX_N 100
 
int N, M, start, finish;
bool adj_matrix[MAX_N+1][MAX_N+1]; //MAX_N이 100이므로 인접행렬로 해결 가능
 
int solve() {
    queue<int> q;
    vector<bool> visited(N+1false);
    vector<int> dist(N+1-1);
    
    q.push(start);
    visited[start] = true;
    dist[start] = 0;
    
    while(!q.empty()) {
        int i = q.front(); q.pop();
        
        if(i == finishreturn dist[i];
        
        for(int j=1; j<=N; j++) {
            if(adj_matrix[i][j] && !visited[j]) {
                q.push(j);
                visited[j] = true;
                dist[j] = dist[i] + 1;
            } 
        }
    }
    return -1;
}
 
int main() {
    scanf("%d %d %d %d"&N, &start, &finish&M);
        
    for(int m=0; m<M; m++) {
        int i, j; scanf("%d %d"&i, &j);
        adj_matrix[i][j] = adj_matrix[j][i] = true; //undirected graph
    }
    
    int r = solve();
    printf("%d", r);
    return 0;
}
cs