(15 分)已知无向连通图 G 由顶点集 V 和边集

(15 分)已知无向连通图 G 由顶点集 V 和边集 E 组成|E|>0,当 G 中度为奇数的顶点个数 为不大于 2 的偶数时,G 存在包含所有边且长度为|E|的路径(称为 EL 路径),设图 G 采用邻接 矩阵存储,类型定义如下:

Typedef struct{
                                    //图的定义 
int numVertices,numEdges; 
                                    //图中实际的顶点数和边数 
Char VertticesList[MAXV]; 
                                    //顶点表。MAXV 为已定义常量 
Int Edge[MAXV][MAXV];
                                    //邻接矩阵 
};MGraph;

请设计算法:int IsExistEL(MGraph G),判断 G 是否存在 EL 路径,若存在,则返回 1,否则,返回 0,要求: 

(1)给出算法的基本设计思想。 

(2)根据设计思想采用 C 或者 C++语言描述算法,关键之处给出注释。 

(3)说明你所设计算法的时间复杂度和空间复杂度。


【答案解析】

(1)算法的基本设计思想

对于采用邻接矩阵存储的无向图,邻接矩阵每一行(列)中非零元素的个数为本行(列)对应顶点的度。可以依次计算连通图 G 中各顶点的度,并记录度为奇数的顶点个数,若个数为 0或 2,则返回 1,否则返回 0。

(2)算法实现

Int IsExistEL(MGraph G)
                   //采用邻接矩阵存储,判断图是否存在 EL 路径
{ int degree,i,j, count=0;
 for(i=0;I<G.numVertices;i++)
 { degree=0;
 for(j=0;j<G.numVertices;j++)
                   //依次计算各个顶点的度
 degree+=G.Edge[i][j];
 if(degree%2!=0)
 count++;   //对度为奇数的顶点计数
}
if(count ==0 || count == 2)
 return 1;  //存在 EL 路径,返回 1
else
 return 0;  //不存在 EL 路径,返回 0
}

(3)算法的时间复杂度和空间复杂度

答案
给出的算法的时间复杂度是 O(n^2),空间复杂度是 O(1)。</span></p>

题目信息

题号:6929
题型:简答题
难度:普通