Cod sursa(job #1562160)

Utilizator jurjstyleJurj Andrei jurjstyle Data 4 ianuarie 2016 20:52:07
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>

using namespace std ;

ifstream f ("bfs.in") ;
ofstream g ("bfs.out") ;

bool vizitat[100005] ;
int distanta[100005] ;
queue <int> q ;
vector <int> G[100005] ;
int N , M , P ;

void bfs ( int nod )
{
 vizitat[nod] = 1 ;
 distanta[nod] = 0 ;
 q.push ( nod ) ;
 while ( !q.empty() )
    {
     int k = q.front() ;
     for ( vector<int>::iterator I = G[k].begin() ; I < G[k].end() ; ++I )
        if ( !vizitat[*I] )
            {
             distanta[*I] = distanta[k] + 1 ;
             q.push ( *I ) ;
             vizitat[*I] = 1 ;
            }
     q.pop () ;
    }
}
void citire ()
{
 f >> N >> M >> P ;
 for ( int i = 1 ; i <= M ; ++i )
     {
      int x , y ;
      f >> x >> y ;
      G[x].push_back(y) ;
      //G[y].push_back (x) ; //-neorientat
     }
 for ( int i = 1 ; i <= N ; ++i ) //initializam
    distanta[i] = -1 ;
}
void afisare ()
{
 for ( int i = 1 ; i <= N ; ++i )
    g << distanta[i] << " " ;;
}
int main()
{
 citire () ;
 bfs ( P ) ;
 afisare () ;
}