Pagini recente » Cod sursa (job #1938786) | Cod sursa (job #2462147) | Cod sursa (job #1251763) | Cod sursa (job #1465987) | Cod sursa (job #1470258)
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define NMAX 100007
using namespace std;
FILE *fin, *fout;
struct type
{
int nod;
int pas;
}tmp, tmpq;
vector<int> adj[NMAX];
queue<type> coada;
int n, m, s, x, y, ans[NMAX], sze;
int main()
{
fin = freopen("bfs.in", "r", stdin);
fout = freopen("bfs.out", "w", stdout);
memset(ans, -1, sizeof(ans));
scanf("%d %d %d", &n, &m, &s);
for(int i = 1; i<= m; ++i)
{
scanf("%d %d", &x, &y);
adj[x].push_back(y);
}
tmp.nod = s;
tmp.pas = 0;
coada.push(tmp);
for( ; !coada.empty(); )
{
tmp = coada.front();
if(ans[tmp.nod] == -1) ans[tmp.nod] = tmp.pas;
else
{
coada.pop();
continue;
}
sze = adj[tmp.nod].size();
tmpq.pas = tmp.pas + 1;
for(int i = 0; i< sze; ++i)
{
if(adj[tmp.nod][i] == tmp.nod) continue;
tmpq.nod = adj[tmp.nod][i];
coada.push(tmpq);
}
coada.pop();
}
for(int i = 1; i<= n; ++i) printf("%d ", ans[i]);printf("\n");
fclose(fin);
fclose(fout);
return 0;
}