Pagini recente » Cod sursa (job #2518275) | Cod sursa (job #1074882) | Cod sursa (job #793227) | Cod sursa (job #2097110) | Cod sursa (job #2786881)
#include <iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("BFS.in");
ofstream g("BFS.out");
vector<vector<int>>structureaza;
vector<int> vizitat;
void arc(int nod1, int nod2)
{
structureaza[nod1].push_back(nod2);
}
int parcurgere_in_latime(int nod, int S, int N)
{
int k = 0, n = N, primul; // contor pt a numara cate noduri trb parcurse din S catre nodul citit
queue<int>coada;
coada.push(nod); // adaug x in coada
for(int i = 0; i < n; i++)
vizitat[i] = 0;
vizitat[nod] = 1; // il marchez
while(!coada.empty())
{
primul = coada.front();
coada.pop();
for(auto i = structureaza[primul].begin(); i!=structureaza[primul].end(); i++)
{
if(!vizitat[*i] && vizitat[S]!=0){ // daca nodul nu a mai fost vizitat
coada.push(*i); // il adaug in coada
vizitat[*i] = 1; // apoi il vizitez
k++;
}
}
}
if(vizitat[S] == 1)
return k;
else
return -1;
}
int main()
{
int N, M, S, i, nod1, nod2; // N varfuri, M arce, S start
f >> N >> M >> S;
vizitat.assign(N, 0);
structureaza.assign(N, vector<int>());
for(i=0; i< M; i++)
{
f >> nod1 >> nod2;
arc(nod1, nod2);
}
for(int i = 0; i<N; i++)
cout<<parcurgere_in_latime(i, S, N);
return 0;
}