Pagini recente » Cod sursa (job #1597073) | Cod sursa (job #2877580) | Cod sursa (job #3003853) | Cod sursa (job #1788651) | Cod sursa (job #1459562)
#include <cstdio>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
int n,m,s;
vector< vector<int> > graf;
vector<int> d;
vector<bool> visited;
queue<int> Q;
void read()
{
in >> n >> m >> s;
d.resize(n+1);
visited.resize(n+1);
for(int i = 0; i <= n; i++)
{
vector<int> v;
graf.push_back(v);
}
int x,y;
for(int i = 0; i <= m; i++)
{
in >> x >> y;
graf[x].push_back(y);
}
}
void bfs(int source)
{
d[source] = 0;
Q.push(source);
visited[source] = true;
while(!Q.empty())
{
int u = Q.front();
Q.pop();
for(unsigned int i = 0; i < graf[u].size(); i++)
{
int v = graf[u][i];
if(visited[v] == false)
{
d[v] = d[u] + 1;
Q.push(v);
visited[v] = true;
}
}
}
}
void write()
{
for(int i = 1; i <= n; i++)
{
if(i != s && d[i] == 0)
out << -1 <<" ";
else
out << d[i] <<" ";
}
}
int main()
{
read();
bfs(s);
write();
return 0;
}