Skip to content

Commit ba8a89c

Browse files
committed
BFS Traversal Problem
1 parent 9df1bac commit ba8a89c

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

CP/GST January SRM/problem3.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include <iostream>
2+
#include <algorithm>
3+
#include <vector>
4+
#include <queue>
5+
#include <cassert>
6+
7+
using namespace std;
8+
9+
void solve() {
10+
int n, m, s, e;
11+
cin >> n >> m >> s >> e;
12+
13+
assert(1 <= n);
14+
assert(1 <= m);
15+
assert(1 <= s && s <= n);
16+
assert(1 <= e && e <= n);
17+
18+
s--;
19+
e--;
20+
21+
vector<int> dist(n, -1);
22+
23+
vector<vector<int>> g(n);
24+
for (int i = 0; i < m; i++) {
25+
int u, v;
26+
cin >> u >> v;
27+
assert(1 <= u && u <= n);
28+
assert(1 <= v && v <= n);
29+
u--;
30+
v--;
31+
g[u].push_back(v);
32+
g[v].push_back(u);
33+
}
34+
35+
queue<int> q;
36+
q.push(s);
37+
dist[s] = 0;
38+
39+
while (!q.empty()) {
40+
int u = q.front(); q.pop();
41+
for (int v : g[u]) {
42+
if (dist[v] == -1) {
43+
dist[v] = dist[u] + 1;
44+
q.push(v);
45+
}
46+
}
47+
}
48+
49+
if (s == e) {
50+
printf("NO\n");
51+
} else if (dist[e] == -1) {
52+
printf("NO\n");
53+
} else {
54+
printf("YES %d\n", max(0, dist[e] - 1));
55+
}
56+
}
57+
58+
int main() {
59+
int t;
60+
cin >> t;
61+
assert(1 <= t);
62+
63+
while (t--) {
64+
solve();
65+
}
66+
}

0 commit comments

Comments
 (0)