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+1, false); 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 == finish) return 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 |
'Algorithm > Data Structure' 카테고리의 다른 글
[BOJ]1260 DFS와 BFS (0) | 2018.08.03 |
---|---|
KOI(한국정보올림피아드) 2000년 중등부 1번 장난감조립 (0) | 2018.07.31 |