本文最后更新于1943天前,其中的信息可能已经有所发展或是发生改变。
本题要求实现邻接矩阵存储图的广度优先遍历。
函数接口定义:
void BFS(MGraph G,Vertex i);
其中MGraph是邻接矩阵存储的图,定义如下:
#define MaxVertexNum 10 /*定义最大顶点数*/ typedef int Vertex;/* 用顶点下标表示顶点,为整型 */ typedef struct{ int arcs[MaxVertexNum][MaxVertexNum]; /*邻接矩阵*/ int vexnum,arcnum; /*图中的顶点数vexnum和边数arcnum*/ }MGraph; /*用邻接矩阵表示的图的类型*/
裁判测试程序样例:
#include"stdio.h" #include"stdlib.h" typedef enum{FALSE,TRUE} Boolean; #define MaxVertexNum 10 /*定义最大顶点数*/ typedef int Vertex;/* 用顶点下标表示顶点,为整型 */ typedef struct{ int arcs[MaxVertexNum][MaxVertexNum]; /*邻接矩阵*/ int vexnum,arcnum; /*图中的顶点数vexnum和边数arcnum*/ }MGraph; /*用邻接矩阵表示的图的类型*/ Boolean visited[MaxVertexNum]; /* 顶点的访问标记 */ void CreatMGraph(MGraph *G);/* 创建图并且将Visited初始化为false;裁判实现,细节不表 */ void BFS(MGraph G,Vertex v); int main() { Vertex v; MGraph G; CreatMGraph(&G); scanf("%d", &v); printf("BFS from %d:",v); BFS(G,v); return 0; } /* 你的代码将被嵌在这里 */
对于给定图:
输入样例:
5
输出样例:
BFS from 5: 5 1 2 4 6 3 0
int Q[100] = {0}; int front=0, rear=0; void BFS(MGraph G,Vertex v){ int u; printf(" %d", v); visited[v] = TRUE; Q[rear++] = v; while(front!=rear){ u = Q[front++]; for(int i = 0; i < G.vexnum; ++i){ if(visited[i]==FALSE && G.arcs[u][i]==1){ printf(" %d", i); visited[i] = TRUE; Q[rear++] = i; } } } }
点击数:510