Cod sursa(job #1234943)

Utilizator vlady1997Vlad Bucur vlady1997 Data 28 septembrie 2014 13:16:35
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
        #include <cstdio>
        #include <vector>
        using namespace std;
        vector <int> g[100001];
        int sol[100001], q[100001], n, m;
        bool ok[100001];
        void bfs (int x)
        {
            int p=1, u=1, nod;
            sol[x]=0; q[p]=x; ok[x]=true;
            while (p<=u)
            {
                nod=q[p];
                while(!g[nod].empty())
                {
                    if (ok[g[nod].back()]==false)
                    {
                        q[++u]=g[nod].back();
                        ok[g[nod].back()]=true;
                        sol[g[nod].back()]=sol[nod]+1;
                    }
                    g[nod].pop_back();
                }
                p++;
            }
        }
        int main()
        {
            int sursa, i, x, y;
            freopen("bfs.in","r",stdin);
            freopen("bfs.out","w",stdout);
            scanf("%d%d%d",&n,&m,&sursa);
            for (i=1; i<=m; i++)
            {
                scanf("%d%d",&x,&y);
                g[x].push_back(y);
                sol[i]=-1;
            }
            bfs(sursa);
            for (i=1; i<=n; i++)
            {
                printf("%d ",sol[i]);
            }
            fclose(stdin);
            fclose(stdout);
            return 0;
        }