Pagini recente » Cod sursa (job #1234403) | Cod sursa (job #40739) | Cod sursa (job #2332010) | Cod sursa (job #2122372) | Cod sursa (job #675827)
Cod sursa(job #675827)
#include <cstdio>
#include <climits>
#include <queue>
#include <vector>
#define MAXN 100001
using namespace std;
int n, m, s;
vector<int> g[ MAXN ];
bool visited[ MAXN ];
int d[ MAXN ] = { INT_MAX }; //TODO why it doesn't work
void read()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d", &n, &m, &s);
for(int i = 1; i <= n; ++i)
{
d[i] = INT_MAX;
g[i].push_back(0);
}
for(int i = 1; i <= m; ++i)
{
int u, v;
scanf("%d%d", &u, &v);
g[ u ].push_back( v );
}
}
void bfs(int s)
{
queue<int> Q;
d[s] = 0;
Q.push(s);
while( !Q.empty() )
{
int u = Q.front(); Q.pop();
visited[u] = true;
for(size_t i = 1; i < g[u].size(); ++i)
{
if( d[u] + 1 < d[ g[u][i] ] )
{
d[ g[u][i] ] = d[u] + 1;
Q.push( g[u][i] );
}
}
}
}
void solve()
{
bfs(s);
}
void printResult()
{
for(int i = 1; i <= n; ++i)
(d[i] != INT_MAX) ? printf("%d ", d[i]) : printf("%d ", -1);
printf("\n");
}
int main()
{
read();
solve();
printResult();
return 0;
}