Pagini recente » Diferente pentru probleme-de-acoperire-2 intre reviziile 21 si 20 | Istoria paginii utilizator/flo2006 | Diferente pentru utilizator/deehoroejkoli intre reviziile 20 si 19 | Istoria paginii utilizator/muresaneliza | Cod sursa (job #492034)
Cod sursa(job #492034)
#include <iostream>
#include <stdio.h>
#include <queue>
#include <list>
#define MAXN 100001
using namespace std;
typedef list<int> nod;
nod graf[MAXN];
int rez[MAXN];
int n,m,s,i,a,b,poz,aux;
queue<int> q;
FILE *fin=fopen("bfs.in","r"), *fout=fopen("bfs.out","w");
void BFS() {
aux=s;
poz=0;
q.push(aux);
rez[s]=0;
while (!q.empty()) {
//cout<<q.front().val<<"\n";
a=q.front();
poz=rez[a]+1;
q.pop();
while (!graf[a].empty()) {
if (rez[graf[a].back()]==-1) {
aux=graf[a].back();
q.push(aux);
rez[aux]=poz;
}
graf[a].pop_back();
}
}
}
int main()
{
fscanf(fin,"%i %i %i ",&n,&m,&s);
for(i=1;i<=m;i++) {
fscanf(fin,"%i %i",&a,&b);
graf[a].push_back(b);
}
for(i=1;i<=n;i++) rez[i]=-1;
BFS();
rez[s]=0;
for(i=1;i<=n;i++) {
fprintf(fout,"%i ",rez[i]);
}
fclose(fout);
return 0;
}