Cod sursa(job #307743)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 24 aprilie 2009 21:54:43
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
//#include<algorithm>
//using namespace std;
#include<stdio.h>

#define DIM 100001

int n,m,s,f[DIM],c[DIM];

struct nod{
    int x;
    nod *urm;};
nod *lst[DIM];

void add(int a,int b){
    nod *p=new nod;

    p->x=b;
    p->urm=lst[a];
    lst[a]=p;}

void bf(){
    int st,dr;
    nod *p;

	f[s]=-1;
	for(c[st=dr=0]=s; st<=dr; ++st)
		for(p=lst[c[st]]; p; p=p->urm)
			if(p->x&&(!f[p->x]||f[c[st]]+1<f[p->x])){
				if(c[st]==s)
					f[p->x]=f[c[st]]+2;
				else
					f[p->x]=f[c[st]]+1;
                c[++dr]=p->x;}}


void solve(){
    int i,x0,y0;

    scanf("%d%d%d",&n,&m,&s);
    for(i=0; i<m; ++i){
        scanf("%d%d",&x0,&y0);
        add(x0,y0);}
    bf();
    for(i=1; i<=n; ++i){
        if(!f[i])
            printf("-1 ");
        else if(f[i]==-1)
            printf("0 ");
        else
            printf("%d ",f[i]);}}

int main(){

    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);

    solve();
    return 0;}