Pagini recente » Cod sursa (job #1781545) | Cod sursa (job #2901847) | Cod sursa (job #1771924) | Cod sursa (job #1128544) | Cod sursa (job #2425222)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
const int NMAX = 100005;
int n,m,s;
vector <int> MyGraf[NMAX];
queue<int> MyQueue;
int fv[NMAX];
int sol[NMAX];
void bfs(int start)
{
MyQueue.push(start);
fv[start]=1;
while(MyQueue.empty()==false)
{
int node = MyQueue.front();
fv[node] = 1;
for(int i=0; i<MyGraf[node].size(); i++)
{
int selected_node = MyGraf[node][i];
if(fv[selected_node]==0)
{
MyQueue.push(selected_node);
sol[selected_node] = sol[node] + 1;
}
}
MyQueue.pop();
}
}
void citire()
{
in>>n>>m>>s;
for(int i=1; i<=m; i++)
{
int x,y;
in>>x>>y;
MyGraf[x].push_back(y);
}
}
void afisare()
{
for(int i=1; i<=n; i++)
{
if(sol[i]==0 & i!=s)
out<<-1<<" ";
else
out<<sol[i]<<" ";
}
}
int main()
{
citire();
bfs(s);
afisare();
return 0;
}