Cod sursa(job #1234893)

Utilizator vlady1997Vlad Bucur vlady1997 Data 28 septembrie 2014 12:00:27
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 2.06 kb
        #include <cstdio>
        #include <vector>
        using namespace std;
        vector <int> g[100001];
        int sol[100001], n, m, sursa, nr=1;
        bool ok[100001];
        void bfs (int x, int pas)
        {
            if (nr==n) return;
            else
            {
                while (!g[x].empty())
                {
                    if (ok[g[x].back()]==true)
                    {
                        if (pas+1<sol[g[x].back()])
                        {
                            sol[g[x].back()]=pas+1;
                            bfs(g[x].back(),pas+1);
                        }
                        g[x].pop_back();
                    }
                    else
                    {
                        sol[g[x].back()]=pas+1;
                        ok[g[x].back()]=true;
                        nr++;
                        bfs(g[x].back(),pas+1);
                        g[x].pop_back();
                    }
                }
            }
        }
        int main()
        {
            int x, y, i;
            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);
                if (x!=y)
                {
                    g[x].push_back(y);
                }
            }
            sol[sursa]=0;
            ok[sursa]=true;
            while (!g[sursa].empty())
            {
                sol[g[sursa].back()]=1;
                ok[g[sursa].back()]=true;
                nr++;
                bfs(g[sursa].back(),1);
                g[sursa].pop_back();
            }
            for (i=1; i<=n; i++)
            {
                if (ok[i]==false)
                {
                    printf("-1 ");
                }
                else
                {
                    printf("%d ",sol[i]);
                }
            }
            fclose(stdin);
            fclose(stdout);
            return 0;
        }