Contents

[백준]5214 환승

Contents

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

풀이:

s[i] : i 번째 하이퍼 튜브에 연결 되어 있는 모든 역

v[i] : i 번 역이 들어있는 하이퍼 튜브

1부터 bfs를 돌아 N번째 역에 도착할 때 지나온 역의 갯수를 출력한다.

코드:

사용언어 : c++

 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
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m, k, i, t, w, d, c[1005], b[100005] = { 1,1 };
int main() {
	cin >> n >> k >> m;
	vector<vector<int>> s(m + 1), v(n + 1); queue<int> q;
	for (q.push(1); i < m; i++)
		for (t = 0; t < k; t++) {
			cin >> w;
			s[i].push_back(w);
			v[w].push_back(i);
		}
	for (i = 0;!q.empty() && !d; i++) {
		queue<int> p;
		while (!q.empty()) {
			w = q.front(), q.pop(), d += w == n;
			for (int a : v[w])
				if (!c[a]) {
					c[a]++;
					for (int e : s[a])
						if (!b[e])
							b[e]++, p.push(e);
				}
		}
		q = p;
	}
	printf("%d", d ? i : -1);
}