Pagini recente » Cod sursa (job #1359128) | Cod sursa (job #446675) | Cod sursa (job #1559405) | Cod sursa (job #210353) | Cod sursa (job #525976)
Cod sursa(job #525976)
#include <cstdio>
#include <queue>
using namespace std;
struct list_node {
int id;
list_node* next;
};
struct vertex {
int id;
bool visited;
int dist;
list_node* neighbors;
};
void readInput();
void releaseData();
int N, M, S;
vertex* adj_list;
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();
list_node* it = adj_list[u].neighbors;
while (it != NULL)
{
if (!adj_list[it->id].visited)
{
adj_list[it->id].dist = adj_list[u].dist+1;
adj_list[it->id].visited = true;
dfs_queue.push(it->id);
}
it = it->next;
}
}
for (int i=1;i<=N;i++)
{
printf("%d ",adj_list[i].dist);
}
printf("\n");
releaseData();
return 0;
}
void readInput()
{
int i, from, to;
scanf("%d %d %d",&N,&M,&S);
adj_list = new vertex [N+1];
for (i=1;i<=N;i++)
{
adj_list[i].id = i;
adj_list[i].visited = false;
adj_list[i].neighbors = NULL;
adj_list[i].dist = -1;
}
for (i=0;i<M;i++)
{
scanf("%d %d",&from,&to);
list_node* nod = new list_node;
nod->id = to;
nod->next = adj_list[from].neighbors;
adj_list[from].neighbors = nod;
}
}
void releaseData()
{
for (int i=1;i<=N;i++)
{
while (adj_list[i].neighbors != NULL)
{
list_node *tmp = adj_list[i].neighbors;
adj_list[i].neighbors = tmp->next;
delete tmp;
}
}
delete[] adj_list;
}