Cod sursa(job #446619)

Utilizator dorelStoica Razvan-Andrei dorel Data 26 aprilie 2010 12:28:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>
#include<vector>
#define N 1000001
using namespace std; 
int n,m,s;
int d[N],pred[N],coada[N];
void citire();
void bfs();
vector<int>a[N];
int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    citire();
    bfs();
    for(int i=1;i<=n;++i)
    {
		printf("%d ",d[i]);
	}
    return 0;
}
void citire()
{
    int x,y;
    scanf("%d%d%d ", &n,&m,&s);
    while(m--)
    {
        scanf("%d%d",&x,&y);
        a[x].push_back(y);
    }
}
void bfs()
{
    int p=0,u=0,i,x,y;
    d[s]=0;
    for(i=1;i<=n;++i)
    {
		d[i]=-1;
    }
	p=u=0;
    coada[u++]=s;
    d[s]=0;
    while(p!=u)
    {
        x=coada[p++];
        for(size_t i=0;i<a[x].size();++i)
        {
            y=a[x][i];
            if(d[y]==-1)
            {
                d[y]=d[x]+1;
                coada[u++]=y;
                pred[y]=x;
            }
		}
    }
}