Pagini recente » Cod sursa (job #946197) | Cod sursa (job #647965) | Cod sursa (job #240017) | Cod sursa (job #345842) | Cod sursa (job #557083)
Cod sursa(job #557083)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#include <stdio.h>
#define nmax 100000
int n,m,s;
int v[nmax];
vector <int> a[nmax];
queue <int> b;
void citire()
{
FILE *in=fopen("bfs.in","r");
fscanf(in,"%i %i %i",&n,&m,&s);
int i,t,v;
for(i=1;i<=m;i++)
{
fscanf(in,"%i %i",&t,&v);
a[t].push_back(v);
}
fclose(in);
}
void parcurgere()
{
b.push(s);
v[s]=0;
while(!b.empty())
{
int bfront=b.front();
while(!a[b.front()].empty())
{
int aback=a[b.front()].back();
if(bfront != aback && v[aback]==0)
{
b.push(a[b.front()].back());
v[a[b.front()].back()]=v[b.front()]+1;;
}
a[b.front()].pop_back();
}
b.pop();
v[s]=1;
}
v[s]=0;
}
void afisare()
{
ofstream out("bfs.out");
int i;
for (i=1;i<=n;i++)
{
if(v[i]==0 && i!=s)
out<<"-1 ";
else
out<<v[i]<<" ";
}
out.close();
}
int main()
{
citire();
parcurgere();
afisare();
return 0;
}