Cod sursa(job #1143183)

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

int n,m,s;

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

typedef struct Nod
{
  int x;
  Nod *a;
} *pNod;

pNod v[100001];

void add(pNod &destinatie,int valoare)
{
    pNod p;
    p = new Nod;
    p->x = valoare;
    p->a = destinatie;
    destinatie = p;
}

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

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

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

    f.close();
}

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

    marc[s]=true;
    cost[s]=0;

    for(pNod p=v[s]; p != NULL; p=p->a)
    {
        nod=p->x;
        if(nod!=s)
        {
            q.push(nod);
            marc[nod]=true;
            cost[nod]=1;
        }
    }
    while(!q.empty())
    {
        nod=q.front();
        q.pop();
        for(pNod p=v[nod]; p != NULL; p=p->a)
        {
            vrf=p->x;
            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;
}