Pagini recente » Cod sursa (job #2052683) | Cod sursa (job #2842934) | Cod sursa (job #2314032) | Cod sursa (job #873286) | Cod sursa (job #2635619)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
int const maxSize = 1000002;
ifstream fin;
ofstream fout;
queue<int>que;
vector<int>adjacency[maxSize];
int visited[maxSize], N, M,S,nr_arce_parcurse;
void citire()
{
fin >> N >> M >> S;
for (int i = 1; i <= M; i++)
{
int x, y;
fin >> x >> y;
adjacency[x].push_back(y);
}
}
void reset_vizita()
{
for (int i = 1;i <= N;i++)
visited[i] = 0;
while (!que.empty())
que.pop();
}
void BFS(int S,int nod_cautat)
{
if (S == nod_cautat)
{
nr_arce_parcurse = 0;
return;
}
reset_vizita();
visited[S] = 1;
que.push(S);
while (!que.empty())
{
int node = que.front();
que.pop();
for (int i = 0; i < adjacency[node].size(); i++)
if (!visited[adjacency[node][i]])
if (adjacency[node][i] == nod_cautat)
{
nr_arce_parcurse++;
if (S != node)
BFS(S, node);
return;
}
else
{
que.push(adjacency[node][i]);
visited[adjacency[node][i]] = 1;
}
}
nr_arce_parcurse = 0;
}
int main()
{
fin.open("bfs.in");
fout.open("bfs.out");
citire();
for (int i = 1;i <= N;i++)
{
BFS(S, i);
if (nr_arce_parcurse == 0&&S!=i)
fout << nr_arce_parcurse - 1 << " ";
else fout << nr_arce_parcurse << " ";
nr_arce_parcurse = 0;
}
fin.close();
fout.close();
return 0;
}