6-3 图的广度遍历-邻接表实现 (10分)

本题要求实现邻接表存储图的广度优先遍历。

函数接口定义:

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; /图类型/

裁判测试程序样例:

#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

输入样例:
5

输出样例:
BFS from 5: 5 1 2 4 6 3 0

void BFS(ALGraph *G,int i)
{
  int q[MAX_VERTEX_NUM],front=0,rear=0;
  printf(" %d",i);
  visited[i]=1;
  q[rear++]=i;
  while(front!=rear)
  {
    int now=q[front++];
    ArcNode *p=G->vertices[now].firstarc;
    while(p)
    {
      if(visited[p->adjvex]==0)
      {
      printf(" %d",p->adjvex);
      visited[p->adjvex]=1;
      q[rear++]=p->adjvex;
      }
      p=p->nextarc;
    }
    
  }
}

你可能感兴趣的:(6-3 图的广度遍历-邻接表实现 (10分))