Cod sursa(job #1047836)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 4 decembrie 2013 22:11:17
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<iostream>
#include<fstream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;

struct nod
{
    int cost,varf;
};

ifstream fin("bfs.in");
ofstream fout("bfs.out");

int n,m,s,viz[100005];
vector <int> v[100005];
nod q[1000005];

inline void Citire()
{
    int x,y;
    fin>>n>>m>>s;
    for (int i=1;i<=m;i++)
        {
           fin>>x>>y;
           v[x].push_back(y);
        }
}

inline void BFS()
{
    int pr,ul,len,j;
    nod k;
    pr=ul=1;
    q[pr].cost=0;
    q[pr].varf=s;
    while (pr<=ul)
        {
            k=q[pr];pr++;len=v[k.varf].size();
            for (j=0;j<len;j++)
                if (viz[v[k.varf][j]]==0 || k.cost+1<viz[v[k.varf][j]])
                    {
                        ul++;
                        q[ul].varf=v[k.varf][j];
                        q[ul].cost=k.cost+1;
                        viz[v[k.varf][j]]=q[ul].cost;
                    }

        }
}

inline void Afisare()
{
    int i;
    for (i=1;i<=n;i++)
        {
            if (i!=s && viz[i]==0)
                fout<<"-1 ";
            else if (i!=s)fout<<viz[i]<<" ";
            else if (i==s) fout<<"0 ";
        }
}

int main()
{
    Citire();
    BFS();
    Afisare();
    return 0;
}