Pagini recente » Cod sursa (job #409394) | Cod sursa (job #3123836) | Istoria paginii runda/coosmin | Cod sursa (job #1890248) | Cod sursa (job #2581107)
#include <bits/stdc++.h>
#define MAX 100000
using namespace std;
struct
{
int nod;
int nrArce;
}coada[MAX * 10 + 5];
int vizitat[MAX + 5], st, dr;
vector<int>graph[MAX + 5];
void bfs(int s, int nrArce = 0)
{
int st, dr;
st = dr = 0;
coada[dr].nod = s;
coada[dr].nrArce = nrArce;
vizitat[s] = nrArce;
while(st <= dr)
{
int nod = coada[st].nod;
for(auto x : graph[nod])
if(x == s)continue;
else if(!vizitat[x])
{
dr++;
coada[dr].nod = x;
coada[dr].nrArce = coada[st].nrArce + 1;
vizitat[x] = coada[dr].nrArce;
}
st++;
}
}
int main()
{
ifstream fin("bfs.in");
ofstream fout("bfs.out");
ios::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
srand(time(NULL));
int n, m, s;
fin >> n >> m >> s;
for(int i = 1; i <= m; i++)
{
int a, b;
fin >> a >> b;
graph[a].push_back(b);
}
bfs(s);
for(int i = 1; i <= n; i++)
{
if(i != s && !vizitat[i])vizitat[i] = -1;
fout << vizitat[i] << " ";
}
fin.close();
fout.close();
return 0;
}