Pagini recente » Cod sursa (job #2064311) | Cod sursa (job #1903685) | Cod sursa (job #2062156) | Cod sursa (job #2524174) | Cod sursa (job #1366418)
#include <cstdio>
#include <string>
#include <sstream>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
class Graph{
private:
vector< vector<int> > G;
vector<int> Distance;
queue<int> Q;
string answer;
int Size;
public:
Graph(void){}
void Resize(int k){
G.resize(k);
Distance.resize(k);
Size = k;
}
void Add_edge(int a,int b){
G[a - 1].push_back(b - 1);
}
string Compute_Distance(int k){
--k;
answer = "";
Distance.assign(Size,0);
Distance[k] = 1;
Q.push(k);
while(!Q.empty())
{
k = Q.front(); Q.pop();
for(vector<int>::iterator it = G[k].begin(); it != G[k].end(); ++it)
if(Distance[*it] == 0)
{
Distance[*it] = Distance[k] + 1;
Q.push(*it);
}
}
for(vector<int>::iterator it = Distance.begin(); it != Distance.end(); ++it)
if(*it)
{
stringstream aux;
aux << *it - 1;
answer += aux.str();
answer += " ";
}
else
answer += "-1 ";
return answer;
}
};
Graph Graf;
int N,M,x;
void Read()
{
scanf("%d%d%d",&N,&M,&x);
Graf.Resize(N);
int a,b;
for(int i = 1; i <= M; ++i){
scanf("%d%d",&a,&b);
Graf.Add_edge(a,b);
}
}
void Solve(){
cout << Graf.Compute_Distance(x);
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
Read();
Solve();
return 0;
}