Cod sursa(job #1754697)

Utilizator bogdanluncasubogdan bogdanluncasu Data 8 septembrie 2016 16:19:32
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<iostream>
#include<list>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,s,cost[100001];
list<int> a[100001];
queue<int> q;
void dfs(int i){
	q.push(i);
	while(q.size()!=0){
		int p=q.front();
		q.pop();
		for(list<int>::iterator it=a[p].begin();it!=a[p].end();){
			q.push(*it);
			if(*it==i)cost[i]=0;
			else if(cost[*it]!=0&&cost[*it]<=cost[p]) ;
			else cost[*it]=cost[p]+1;
			a[p].erase(it++);				
		}
	}		
	for(int j=1;j<=n;j++){
		if(i==j)cout<<0<<" ";
		else if(cost[j]==0)cout<<-1<<" ";
		else cout<<cost[j]<<" ";
	}
};
int main(){
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	int n1,n2;
    scanf("%d %d %d",&n,&m,&s);
    for(int i=1;i<=m;i++){
    	scanf("%d %d",&n1,&n2);
    	a[n1].push_back(n2);
    }
	dfs(s);

}