Cod sursa(job #1791409)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 29 octombrie 2016 12:44:17
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <queue>
#include <vector>
#define nmax 100010
using namespace std;
vector <unsigned int> a[nmax];
queue <unsigned int> q;
int d[nmax];
bool viz[nmax];
void bfs(unsigned int s)
{
    unsigned int x,y,i;
    viz[s]=1;q.push(s);
    while (!q.empty())
    {
        x=q.front();q.pop();
        for (i=0;i<a[x].size();i++)
        {
            y=a[x][i];
            if (!viz[y])
            {
                viz[y]=1;
                d[y]=d[x]+1;
                q.push(y);
            }
        }
    }
}
int main()
{
    ifstream f("bfs.in");
    ofstream g("bfs.out");
    unsigned int n,m,s,i,x,y;
    f>>n>>m>>s;
    for (i=1;i<=m;i++)
    {
        f>>x>>y;
        if (x!=y)
        {
            a[x].push_back(y);
        }
    }
    bfs(s);
    for (i=1;i<=n;i++)
    {
        if (!d[i])
        {
            if (i!=s) g<<"-1 ";
            else g<<"0 ";
        }
        else g<<d[i]<<' ';
    }
    g<<'\n';
    f.close();
    g.close();
    return 0;
}