Pagini recente » Cod sursa (job #1229955) | Cod sursa (job #2737301) | Cod sursa (job #2594010) | Cod sursa (job #3031881) | Cod sursa (job #2974101)
#include <bits/stdc++.h>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
vector < int > v[100005];
queue < int > q;
int best[500005];
bool inq[500005];
const int inf = 2e9;
int n, m , s;
void Dijkstra(int nod)
{
q.push(nod);
inq[nod] = 1;
best[nod] = 0;
while(q.empty() == 0)
{
nod = q.front();
q.pop();
for (int i = 0 ; i < v[nod].size() ; i++)
{
int vecin = v[nod][i];
if(best[nod] + 1 < best[vecin])
{
best[vecin] = best[nod] + 1;
if(inq[vecin] == 0)
q.push(vecin);
}
}
}
}
int main()
{
f >> n >> m >> s;
int x , y;
for (int i = 1 ; i <= m ; i++)
{
f >> x >> y;
v[x].push_back(y);
}
for (int i = 1 ; i <= n ; i++)
best[i] = inf;
best[s] = 0;
Dijkstra(s);
for ( int i = 1 ; i <= n ; i++)
if(best[i] == inf)
g << -1 << " ";
else
g << best[i] << " ";
}