Cod sursa(job #1894692)

Utilizator geo_furduifurdui geo geo_furdui Data 27 februarie 2017 12:54:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include<climits>
using namespace std;
ifstream cin ("bfs.in");
ofstream cout ("bfs.out");
int n,nr,m,cost[1010][1010],start[100010],vecini[1010],p,coada[100010],viz[100010],tata[1010],flux,s;
struct bla
{
    int nod,urm;
} t[1000010];
void read ()
{ int a,b,c,k=0;
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b; if(b==n) vecini[++p]=a;
        t[++k].nod=b; t[k].urm=start[a]; start[a]=k;
    }
}
void bfs ()
{ for(int i=1;i<=n;i++) viz[i]=0;
    int ps=1,pi=1;
    coada[1]=s;
    viz[s]=1;
    while(ps<=pi)
    {
        int x=start[coada[ps]];
        while(x)
        {
            if( viz[t[x].nod]==0 )
            {viz[t[x].nod]=viz[coada[ps]]+1;  coada[++pi]=t[x].nod; }
            x=t[x].urm;
        } ++ps;
    }

}
void write ()
{
    for(int i=1;i<=n;i++)
    {
        if(i==s) cout<<0<<" ";
        else
        {
            if(viz[i]!=0) cout<<viz[i]-1<<" "; else cout<<-1<<" ";
        }
    }
}
int main()
{
    read();
    bfs();
    write();
    cin.close();
    cout.close();
    return 0;
}