Cod sursa(job #1754685)

Utilizator bogdanluncasubogdan bogdanluncasu Data 8 septembrie 2016 15:58:54
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<iostream>
#include<list>
#include<stack>
#include<algorithm>
using namespace std;
int n,m,s,viz[100001],c,cost[100001];
list<int> a[100001];
stack<int> q;
void dfs(int i){
	c=0;
	q.push(i);
	while(q.size()!=0){
		int p=q.top();
		q.pop();
		if(!viz[p]){
			viz[p]=1;
			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]+1;
				else if(cost[*it]<=cost[p]) ;
				else cost[*it]=cost[p]+1;
				a[p].erase(it++);				
			}
			c++;
		}
	}		
	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);

}