Pagini recente » Cod sursa (job #2210501) | Cod sursa (job #1862626) | Cod sursa (job #23373) | Cod sursa (job #2379173) | Cod sursa (job #2194135)
#include <stdio.h>
#include <deque>
using namespace std;
FILE *f, *g;
int n, m, s;
int t[2][1000002], start[100002], length[100002];
deque <int> deq;
void ways()
{
int i, j, k = 0;
fscanf(f, "%d %d", &i, &j);
while(!feof(f))
{
if(i != j)
{
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;
deq.push_back(s);
while(!deq.empty())
{
nodex = deq.front();
next=start[nodex];
start[nodex]=-1;
while(next!=0)
{
poz=next;
next=t[1][poz];
if(start[t[0][poz]]!=-1)
{
deq.push_back(t[0][poz]);
length[t[0][poz]]=length[nodex]+1;
}
}
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] || i == s)
fprintf(g, "%d ", length[i]);
else fprintf(g, "-1 ");
return 0;
}