首页 > 题库 > 职业考证 > 软考 > 软件设计师 > 案例题

阅读下列说明和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的邻接表表示。

参考答案: 查看答案 查看解析 查看视频解析 下载APP畅快刷题

相关知识点试题

相关试卷