Cod sursa(job #1754740)

Utilizator bogdanluncasubogdan bogdanluncasu Data 8 septembrie 2016 16:57:31
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,s,cost[100001],vizit[100001];
vector<int> a[100001];
queue<int> q;
void dfs(int i){
	q.push(i);
	vizit[i]=1;
	while(q.size()!=0){
		int p=q.front();
		q.pop();
		for(list<int>::iterator it=a[p].begin();it!=a[p].end();){
			if(cost[*it]!=0&&cost[*it]<=cost[p]) ;
			else if(i!=*it){
				if(!vizit[*it])
				q.push(*it);
				vizit[*it]=1;
				cost[*it]=cost[p]+1;
			}
			a[p].erase(it++);				
		}
	}		
	for(int j=1;j<=n;j++){
		if(cost[j]==0&&i!=j)printf("-1 ");
		else printf("%d ",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);
}