永发信息网

求一个用c++编写的广度优先搜索的简单例子

答案:3  悬赏:20  手机版
解决时间 2021-02-03 19:32
  • 提问者网友:献世佛
  • 2021-02-03 04:58
需要对一个网络结构的节点按广度优先搜索来形成节点队列,网络为辐射型网,都只有一个父节点,利用各节点的邻接表通过广度优先搜索来得到节点队列的程序。(好像叙述的有点冗繁了呵呵)
给个10节点邻接表例子吧
节点1:---2
节点2:---3,4
节点3:---6,5
节点4:---10
节点6:---9,8,7
节点5,10,9,8,7为末梢节点,没有邻接点
最佳答案
  • 五星知识达人网友:举杯邀酒敬孤独
  • 2021-02-03 06:12
非原创~转的:

#include <stdio.h>
#include <string.h>

#define max 500

int map[max][max];
int visited[max];

int bfs (int v, int n)
{
int j, k, maxsize, front, rear;
int queue[max];
maxsize = max;
front = rear = 0;
visited[v] = 1;
printf ("%d ", v);
queue[++ rear] = v;
while (front != rear) {
front = (front + 1) % maxsize;
k = queue[front];
for (j = 1; j <= n; j ++) {
if (map[k][j] && !visited[j] ) {
printf ("%d ", j);
visited[j] = 1;
rear = (rear + 1) % maxsize;
queue[rear] = j;
}
}
}
return 0;
}
int main ()
{
int i, n, data;
scanf ("%d", &n);
memset (map , 0, sizeof (map));
memset (visited, 0, sizeof(visited));
for (i = 1; i <= n; i ++) {
while (scanf ("%d", &data) && data != 0) {
map[data][i] = map[i][data] = 1;
}
}
bfs (1, n);
printf ("\n");
return 0;
}
全部回答
  • 1楼网友:想偏头吻你
  • 2021-02-03 07:05
是要广度优先列出所有节点? 伪代码吧: 先准备好一个队列 NodeQueue , push_back根节点在里面。然后是下面的循环: while ( ! NodeQueue.empty()) { node = NodeQueue.pop_front(); print(node); // 或者无论对这个node本身的值做点什么都可以 foreach (child) { NodeQueue.push_back(child); // 就是遍历它的child放进queue里 } }
  • 2楼网友:空山清雨
  • 2021-02-03 06:32
是要广度优先列出所有节点? 伪代码吧: 先准备好一个队列 NodeQueue , push_back根节点在里面
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯