Cod sursa(job #1039273)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 22 noiembrie 2013 18:57:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
 #include <fstream>
 #include <cstring>
 #include <algorithm>
 #include <vector>
 #include <queue>
 
 using namespace std;
 
 # define dim 100005
 # define inf 999999999
 
 ifstream f("bfs.in");
 ofstream g("bfs.out");
 
 vector <int> A[dim];
 queue <int > q;
 int drum[dim];
 int N, M, S;
 
 void citire()
 {
	 int i, X, Y;
	 
	 f >> N >> M >> S;
	 
	 for (i = 1; i <= M; ++i)
	 {
		 f >> X >> Y;
		 A[X].push_back(Y);
	 }
	 
	 for (i = 1; i <= N; ++i)
		 drum[i] = inf;
 }
 
 void rezolva(int X)
 {
	 int i, xx;
	 drum[X] = 0;
	 
	 q.push( X );
	 
	 while(!q.empty())
	 {
		 xx = q.front();
		 for (i = 0 ; i < A[xx].size(); ++i)
			 if(drum[A[xx][i]] > drum[xx] + 1)
			 {
			    drum[A[xx][i]] = drum[xx] + 1;
				q.push( A[xx][i] );
			 }
	     q.pop();
	 }
 }
 
 int main()
 {
	 int i;
	 citire();
	 rezolva(S);
	 for (i = 1; i <= N; ++i)
		 if(drum[i] == inf)
			 g << "-1" << " ";
		 else
			 g << drum[ i ] << " ";
	 return 0;
 }