Pagini recente » Diferente pentru utilizator/shadowfax intre reviziile 2 si 1 | Profil JohnyErvin | Cod sursa (job #1108391) | Cod sursa (job #1231338) | Cod sursa (job #1117888)
#include <cstdio>
#include <vector>
#define MAX_N 100001
using namespace std;
int n, m, vf, q[MAX_N], sol[MAX_N], viz[MAX_N];
vector<int> graph[MAX_N];
FILE *f, *g;
int main()
{
int x, y, p, u, k;
f= fopen("bfs.in", "r");
g= fopen("bfs.out", "w");
fscanf(f, "%d%d%d", &n, &m, &vf);
for(int i=0; i<m; i++)
{
fscanf(f, "%d%d", &x, &y);
graph[x].push_back(y);
}
for(int i=1; i<=n; i++)
sol[i]=-1;
p=u=0;
q[p]=vf;
sol[vf]=0; viz[vf]=1;
while(p<=u)
{
k=q[p];
for(vector<int>::iterator it=graph[k].begin(); it!=graph[k].end(); it++)
if(viz[*it]==0)
{
u++;
q[u]=*it;
viz[*it]=1;
sol[*it]=sol[k]+1;
}
p++;
}
for(int i=1; i<=n; i++)
fprintf(g, "%d ", sol[i]);
fclose(f);
fclose(g);
return 0;
}