Pagini recente » Cod sursa (job #1116780) | Cod sursa (job #133432) | Cod sursa (job #1640235) | Cod sursa (job #297225) | Cod sursa (job #866472)
Cod sursa(job #866472)
#include<iostream>
#include<fstream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#define NMAX 100002
using namespace std;
FILE *f1=fopen("bfs.in","r"), *f2=fopen("bfs.out","w");
vector <int> v[NMAX];
int n,m,start,L;
int s[NMAX],cost[NMAX];
void read()
{
int a,b;
fscanf(f1,"%d %d %d", &n, &m, &start);
for (int i=1;i<=m;++i)
{
fscanf(f1,"%d %d",&a, &b);
v[a].push_back(b);
}
}
void BFS(int nod)
{
int i,j;
//initializez vectorul costurilor cu -1
memset(cost, -1, sizeof(cost));
//initializare coada
L=1;
cost[nod]=0;
s[L]=nod;
//eliminare noduri
for(int i=1;i<=L;++i)
for(int j=0;j<v[s[i]].size();++j)
if (cost[v[s[i]][j]] == -1) //daca gasesc un vecin nevizitat al lui s[i]
{
s[++L]=v[s[i]][j];
cost[s[L]]=cost[s[i]]+1;
}
}
void write()
{
for(int i=1;i<=n;++i)
fprintf(f2,"%d ",cost[i]);
fprintf(f1,"\n");
}
int main (void)
{
read();
BFS(start);
write();
fclose(f1);
fclose(f2);
return 0;
}