Cod sursa(job #1284195)

Utilizator rauldDordai Raul rauld Data 6 decembrie 2014 12:35:12
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stdio.h>

using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");

int c[100008],v[100009],r[100009],p,u,s,n,m;   // c-coada folosit  v-vectorul de verificare  r-sirul nr de arce parcurse

vector<int> sir[100009];
vector<int>::iterator it;

void bf()
{
   p=u=1;   //initializarea cozii
   c[p]=s;   //adugam nodul principal in caoda
   while(p<=u)  //cat timp coada nu e vida
   {
       for(it=sir[c[p]].begin();it!=sir[c[p]].end();it++)
           if(v[*it]==0) //daca nodul nu e verificat
       {
           u++;
           c[u]=*it;  //adaugam nodul in coada
           v[*it]=1;   //marcam nodul ca fiind verificat
           r[*it]=r[c[p]]+1;  //crestem distanta parcursa
       }
    p++; //ne mutam la urmatorul nod din coada
   }

}

int main()
{
    int i,x,y;
    f>>n>>m>>s;  //citirea numarului de noduri,numarului de arce si a nodului principal
    v[s]=1;      //marcam nodul prinsipal ca fiind vizitat
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        sir[x].push_back(y);
    }
    bf();
    for(i=1;i<=n;i++)    //parcurgerea nodurilor
    {
       if(i!=s && r[i]==0)r[i]=-1;  //daca nu ne aflam la nodul principal si nu se poate ajunge la acest nod ,marcam numarul de arce necesare pentru a ajunge la nodul principal cu -1
       g<<r[i]<<" ";   //afisare nr de arce care trebuie parcurse pentru a ajunge de al nodul principal la nodul i
    }
}