阅读下列说明和C代码,回答问题1至问题2,将解答写在答题纸的对应栏内。
【说明】
下面的C程序采用深度优先遍历(DFS)来计算图G中的连通分量数。其中图G采用邻接表表示。
【C代码】
(1)主要变量说明
G:图,用邻接表存储
visited[]:数组,长度为Max Vnum,visited[i] = 0 表示顶点i未被访问;visited[i] = 1 表示顶点i已经被访问
count:图G的连通分量数
(2)函数定义
#include <stdio.h>
#define Max Vnum 100
int visited[Max Vnum]={0};
/* 顶点节点 */
typedef struct ArcNode{
int adjvex; /*顶点编号,从0开始*/
struct ArcNode *nextarc; /*指向下一个邻接点*/
}ArcNode;
/* 顶点单链表头节点 */
typedef struct {
char *data; /*顶点标签,如“v1" */
ArcNode *firstarc; /*指向第一个邻接点*/
}AdjList[Max Vnum];
/* 图 */
typedef struct {
int vexnum, arcnum; /*图的顶点数和边数*/
AdjList vertices; /*图的邻接表*/
}AGraph;
/* 从顶点v开始深度优先遍历DFS图G */
void DFS(AGraph G, int v){
ArcNode *p;
visited[v]= 1;
p = G.vertices[v].firstarc;
while(p != NULL){
if(visited[__(1)___]==0){
DFS(G,p->adjvex);
}
_____(2)_____;
}
}
/* 计算图G的连通分量数 */
int getNum(AGraph G){
int i, count = 1;
____(3)____;
for(i = 0; i<G.vexnum;i++){
if(visited[i] ==0){
____(4)____;
DFS(G,i);
}
}
____(5)____;
}
【问题1】(10分)
根据以上说明和C代码,填充C代码中的空(1) ~ (5)。
【问题2】(5分)
给出图4-1中图G的邻接表表示。