Pagini recente » Cod sursa (job #306553) | Cod sursa (job #2974608) | Cod sursa (job #274922) | Cod sursa (job #2789230) | Cod sursa (job #2768024)
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
char buff[4096];
int pbuf=4095;
void readbuff()
{
pbuf=0;
fin.read(buff,4095);
}
int citire()
{
int nr=0;
if(pbuf==4095)
{
readbuff();
}
while(buff[pbuf]<'0'||buff[pbuf]>'9')
{
pbuf++;
if(pbuf==4095)
{
readbuff();
}
}
while(buff[pbuf]>='0'&&buff[pbuf]<='9')
{
nr=nr*10+buff[pbuf]-'0';
pbuf++;
if(pbuf==4095)
{
readbuff();
}
}
return nr;
}
vector<int>v[100005];
queue<int>q;
int dist[100005];
void BFS(){
int nod;
while(!q.empty()){
nod=q.front();q.pop();
for(auto i:v[nod]){
if(dist[i]>dist[nod]+1){
dist[i]=dist[nod]+1;
q.push(i);
}
}
}
}
int main()
{
int n,m,s,a,b;
n=citire();m=citire();s=citire();
for(int i=1;i<=m;i++){
a=citire();b=citire();
v[a].push_back(b);
}
for(int i=1;i<=n;i++){
dist[i]=INT_MAX;
}
dist[s]=0;
q.push(s);
BFS();
for(int i=1;i<=n;i++){
if(dist[i]==INT_MAX){
fout<<"-1 ";
}
else{
fout<<dist[i]<<" ";
}
}
fout<<'\n';
return 0;
}