Pagini recente » Cod sursa (job #2551047) | Cod sursa (job #2653768) | Cod sursa (job #2179242) | Cod sursa (job #2541234) | Cod sursa (job #525982)
Cod sursa(job #525982)
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
#define NMAX 100000
struct vertex {
int id;
bool visited;
int dist;
vector<int> neighbors;
};
void readInput();
int N, M, S;
vertex adj_list[NMAX+1];
int main(void)
{
queue<int> dfs_queue;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
readInput();
adj_list[S].dist = 0;
adj_list[S].visited = true;
dfs_queue.push(S);
while (!dfs_queue.empty())
{
int u = dfs_queue.front();
dfs_queue.pop();
for (int i=0;i<adj_list[u].neighbors.size();i++)
{
int id = adj_list[u].neighbors[i];
if (!adj_list[id].visited)
{
adj_list[id].dist = adj_list[u].dist+1;
adj_list[id].visited = true;
dfs_queue.push(id);
}
}
}
for (int i=1;i<=N;i++)
{
printf("%d ",adj_list[i].dist);
}
printf("\n");
return 0;
}
void readInput()
{
int i, from, to;
scanf("%d %d %d",&N,&M,&S);
for (i=1;i<=N;i++)
{
adj_list[i].id = i;
adj_list[i].visited = false;
adj_list[i].dist = -1;
}
for (i=0;i<M;i++)
{
scanf("%d %d",&from,&to);
adj_list[from].neighbors.push_back(to);
}
}