Cod sursa(job #1143171)

Utilizator tanduraDomnita Dan tandura Data 14 martie 2014 21:17:06
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

int n,m,s;

vector<bool> marc;
vector<int> cost;
vector<queue<int> >v;

void citire()
{
    ifstream f("bfs.in");
    f>>n>>m>>s;

    marc.resize(n+1,false);
    cost.resize(n+1,-1);
    v.resize(n+1);

    int a,b;
    for(int i=1;i<=m;i++)
    {
        f>>a>>b;
        v[a].push(b);
    }

    f.close();
}

void rezolvare()
{
    int nod,vrf;
    queue<int> q;

    marc[s]=true;
    cost[s]=0;
    while(!v[s].empty())
    {
        nod = v[s].front();
        v[s].pop();
        if(nod!=s)
        {
            q.push(nod);
            marc[nod]=true;
            cost[nod]=1;
        }
    }
    while(!q.empty())
    {
        nod=q.front();
        q.pop();
        while(!v[nod].empty())
        {
            vrf = v[nod].front();
            v[nod].pop();
            if(!marc[vrf])
            {
                q.push(vrf);
                marc[vrf]=true;
                cost[vrf]=cost[nod]+1;
            }
        }
    }
}

void afisare()
{
    ofstream g("bfs.out");
    for(int i=1;i<=n;i++)
        g<<cost[i]<<" ";
    g<<"\n";
    g.close();
}

int main()
{
    citire();
    rezolvare();
    afisare();
    return 0;
}