Cod sursa(job #879558)

Utilizator savu_marioSavu Darie Mario savu_mario Data 15 februarie 2013 17:11:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<fstream>
#include<vector>
using namespace std;
int n,m,s,coada[100005],viz[100005];
vector<int> g[100005];
ofstream gout("bfs.out");
ifstream f("bfs.in");
void citire();
void afisare();
void bfs(int x);
int main()
{
    citire();
    bfs(s);
    afisare();
    gout.close();
    f.close();
    return 0;
}
void citire()
{
    f>>n>>m>>s;
    int x,y;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y;
        g[x].push_back(y);
    }
}
void afisare()
{
    for(int i=1;i<=n;i++)
    {
        if(viz[i])
        {
            if(i!=s)    gout<<viz[i]<<' ';
            else    gout<<'0'<<' ';
        }
        else    gout<<"-1"<<' ';
    }
}
void bfs(int x)
{
    int ic,sc,dist;
    ic=sc=dist=1;
    coada[1]=x;
    viz[x]=1;
    vector<int>::iterator it;
    while(ic<=sc)
    {
        for(it=g[x].begin();it!=g[x].end();it++)
        {
            if(!viz[*it])
            {
                viz[*it]=dist;
                sc++;
                coada[sc]=*it;
            }
        }
        ic++;
        x=coada[ic];
        dist=viz[coada[ic]]+1;
    }
}