-->
当前位置:首页 > 题库 > 正文内容

函数题:图的广度遍历-邻接表实现

Luz4年前 (2021-12-13)题库629
本题要求实现邻接表存储图的广度优先遍历。

### 函数接口定义:
c++

void BFS(ALGraph *G,int i);


其中ALGraph是邻接表存储的图,定义如下:

#define MAX_VERTEX_NUM 10 /*定义最大顶点数*/
typedef int Vertex;
typedef struct ArcNode{ /*表结点*/
int adjvex; /*邻接点域*/
struct ArcNode *nextarc; /*指向下一个表结点*/
}ArcNode;
typedef struct VNode{ /*头结点*/
Vertex data; /*顶点域*/
ArcNode *firstarc; /*指向第一个表结点*/
}VNode,AdjList[MAX_VERTEX_NUM]; /*AdjList是数组类型*/
typedef struct {
AdjList vertices; /*邻接表中数组定义*/
int vexnum,arcnum; /*图中当前顶点数和边数*/
} ALGraph; /*图类型*/


### 裁判测试程序样例:
c++

#include"stdio.h"
#include"stdlib.h"
#define MAX_VERTEX_NUM 10 /*定义最大顶点数*/
typedef int Vertex;
typedef struct ArcNode{ /*表结点*/
int adjvex; /*邻接点域*/
struct ArcNode *nextarc; /*指向下一个表结点*/
}ArcNode;
typedef struct VNode{ /*头结点*/
Vertex data; /*顶点域*/
ArcNode *firstarc; /*指向第一个表结点*/
}VNode,AdjList[MAX_VERTEX_NUM]; /*AdjList是数组类型*/
typedef struct {
AdjList vertices; /*邻接表中数组定义*/
int vexnum,arcnum; /*图中当前顶点数和边数*/
} ALGraph; /*图类型*/
typedef enum{FALSE,TRUE} Boolean;
Boolean visited[MAX_VERTEX_NUM];/*定义标志向量,为全局变量*/
void CreatALGraph(ALGraph *G);/* 创建图并且将Visited初始化为false;裁判实现,细节不表 */
void BFS(ALGraph *G,int v);
int main()
{
Vertex v;
ALGraph G;
CreatALGraph(&G);
scanf("%d", &v);
printf("BFS from %d:",v);
BFS(&G,v);
return 0;
}
/* 你的代码将被嵌在这里 */

对于给定图:

![图的遍历样例.png](~/1925201b-23e2-4677-9dc1-bec149a29e61.png)
### 输入样例:
in
7 9
0 2
0 3
0 4
1 3
1 5
2 3
2 5
4 5
5 6
5


### 输出样例:

out
BFS from 5: 5 6 4 2 1 0 3








答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。