Cod sursa(job #751452)

Utilizator VisuianMihaiMihai Visuian VisuianMihai Data 26 mai 2012 09:49:13
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <queue>
#include<vector>
using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

vector<int> v[100001];

queue<int> q;

bool visited[100001];

int drum[100001];

//  BFS

void bfs(int s)
{
	int x, i;
	visited[s]=true;
    q.push(s);//pun in coada nodul sursa;
    drum[s]=0;//drumul sau il initializez cu 0;
    while(!q.empty()) // daca mai am elemente in coada
    {
        x=q.front(); //verific toti veinii primului element din coada;
        for(i = 0;i < v[x].size();i++)
            if(!visited[v[x][i]])//daca nu am mai vizitat vecinul,
            {
                q.push(v[x][i]);//il pun in coada si
                drum[v[x][i]]=drum[x]+1;
                visited[v[x][i]]=true;// il marchez ca vizitat;
            }
        q.pop();//sterg elementul din coada;
    }
}
int main()
{
    int n,m,s,x,y;
    fin>>n>>m>>s;
    for(int i=1;i<=n;i++)
        drum[i]=-1;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        v[x].push_back(y);
    }
	bfs(s);
    for(int i=1;i<=n;i++)
        fout<<drum[i]<<' ';
    fin.close();
    fout.close();
    return 0;
}