Cod sursa(job #854501)

Utilizator RamaStanciu Mara Rama Data 13 ianuarie 2013 17:55:34
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <vector>

using namespace std;
vector <int> G[100001];
int N,M,S,Q[100001],mark[100001];

void bfs()
{
    int k1,k2=1;
    Q[k2]=S;
    for(int i=1;i<=N;i++)
        mark[i]=0;
    mark[S]=1;
    k1=0;
    while(k1<k2)
    {
        k1++;
        int l=G[Q[k1]].size();
        for(int i=0;i<l;i++)
        {
            if(mark[G[Q[k1]][i]]==0)
                {

                    mark[G[Q[k1]][i]]=mark[Q[k1]]+1;
                    Q[++k2]=G[Q[k1]][i];
                }
        }

    }


}
int main()
{
    FILE *f,*g;
    f=fopen("bfs.in","r");
    g=fopen("bfs.out","w");
    fscanf(f,"%d%d",&N,&M);
    fscanf(f,"%d",&S);
    int x,y;
    for(int i=0;i<M;i++)
    {
        fscanf(f,"%d%d",&x,&y);
        G[x].push_back(y);
    }
    bfs();
    for(int i=1;i<=N;i++)
    {
        if ((mark[i]!=0) && (i!=S)) fprintf(g,"%d ",mark[i]-1);
            else if (i==S) fprintf(g,"0 ");
                else  fprintf (g,"-1 ");
    }
    return 0;
}