Pagini recente » Cod sursa (job #2714785) | Cod sursa (job #1575910) | Cod sursa (job #3172164) | Cod sursa (job #2162716) | Cod sursa (job #2194143)
#include <stdio.h>
#include <deque>
using namespace std;
FILE *f, *g;
int n, m, s;
int t[2][1000002], start[100002], length[100002];
bool been[100002];
deque <int> deq;
void ways()
{
int i, j, k = 0;
fscanf(f, "%d %d", &i, &j);
while(!feof(f))
{
k++;
t[0][k] = j;
t[1][k] = start[i];
start[i] = k;
fscanf(f, "%d %d", &i, &j);
}
}
void path()
{
int node, nodex, poz, next;
for(int i=1;i<=n;i++)
length[i]=9999999;
deq.push_back(s);
length[s]=0;
while(!deq.empty())
{
nodex = deq.front();
poz = start[nodex];
been[nodex]=1;
while(poz)
{
if(!been[t[0][poz]] || length[nodex]+1<length[t[0][poz]])
{
deq.push_back(t[0][poz]);
length[t[0][poz]] = length[nodex] + 1;
been[t[0][poz]]=1;
}
poz=t[1][poz];
}
deq.pop_front();
}
}
int main()
{
f = fopen("bfs.in", "r");
g = fopen("bfs.out", "w");
fscanf(f, "%d %d %d", &n, &m, &s);
ways();
path();
for(int i = 1; i <= n; i++)
if(length[i]!=9999999 || i == s)
fprintf(g, "%d ", length[i]);
else fprintf(g, "-1 ");
return 0;
}