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

来源:百度知道 编辑:UC知道 时间:2024/05/17 22:16:05
需要对一个网络结构的节点按广度优先搜索来形成节点队列,网络为辐射型网,都只有一个父节点,利用各节点的邻接表通过广度优先搜索来得到节点队列的程序。(好像叙述的有点冗繁了呵呵)
给个10节点邻接表例子吧
节点1:---2
节点2:---3,4
节点3:---6,5
节点4:---10
节点6:---9,8,7
节点5,10,9,8,7为末梢节点,没有邻接点

非原创~转的:

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

#define max 500

int map[max][max]; /*标记两个顶点是否相邻, 是则1, 否则0*/
int visited[max]; /*标记节点是否访问,是则1, 否则0*/

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 ++)