Pagini recente » Cod sursa (job #1628810) | Cod sursa (job #1731426) | Cod sursa (job #990485) | Cod sursa (job #1492309) | Cod sursa (job #2903201)
#include <iostream>
#include <vector>
#include <list>
#include <utility>
#include <queue>
#include <fstream>
using namespace std;
int minEdgeBFS(vector <int> edges[], int u, int v, int n)
{
vector<bool> visited(n + 10, 0);
vector<int> distance(n + 10, 0);
queue <int> Q;
distance[u] = 0;
Q.push(u);
visited[u] = true;
while (!Q.empty())
{
int x = Q.front();
Q.pop();
for (int i = 0; i < edges[x].size(); i++)
{
if (visited[edges[x][i]])
continue;
distance[edges[x][i]] = distance[x] + 1;
Q.push(edges[x][i]);
visited[edges[x][i]] = true;
}
}
return distance[v];
}
void addEdge(vector <int> edges[], int u, int v)
{
edges[u].push_back(v);
}
ifstream fin("bfs.in");
ofstream fout("bfs.out");
vector<int> edges[100005];
int main() {
int N = 0, M = 0, S= 0;
int x = 0, y = 0;
fin >> N >> M >> S;
edges->resize(N);
for (int i = 0; i < M; i++)
{
fin >> x >> y;
addEdge(edges,x, y);
}
for (int i = 1; i <= N; i++)
if (i == S)
fout << 0 << ' ';
else if (minEdgeBFS(edges, S, i, N) == 0 && i != S)
fout << -1 << ' ';
else
fout << minEdgeBFS(edges,S,i,N) << ' ';
}