Pagini recente » Cod sursa (job #3282398) | Cod sursa (job #3293348) | Cod sursa (job #53343) | Cod sursa (job #835715) | Cod sursa (job #2467543)
#include<bits/stdc++.h>
using namespace std;
class Graph {
public:
vector < vector < int > > v;
void readGraph (int N, int M, bool isDigraph = 0) {
v.resize (N);
while (M --) {
int x, y;
scanf ("%d %d", &x, &y);
x --, y --;
v[x].push_back (y);
if (!isDigraph)
v[y].push_back (x);
}
}
int size () {
return v.size ();
}
}g;
vector < int > bfs (Graph &g, int source) {
vector < int > ans (g.size (), -1);
queue < int > cc;
cc.push (source), ans[source] = 0;
while (!cc.empty ()) {
int node = cc.front ();
cc.pop ();
for (auto it : g.v[node])
if (ans[it] == -1)
ans[it] = ans[node] + 1,
cc.push (it);
}
return ans;
}
int main () {
freopen ("bfs.in", "r", stdin);
freopen ("bfs.out", "w", stdout);
int N, M, S;
scanf ("%d %d %d", &N, &M, &S), S --;
g.readGraph (N, M, 1);
auto ans = bfs (g, S);
for (auto it : ans)
printf ("%d ", it);
printf ("\n");
}