题7
题目
【2021 统考真题】已知无向连通图
typedef struct { // 图的定义
int numVertices, numEdges;
char VerticesList[MAXV]; // 顶点表。MAXV 为已定义常量
int Edge[MAXV][MAXV]; // 邻接矩阵
} MGraph;请设计算法 int IsExistEL(MGraph G), 判断 G 是否存在 EL 路径, 若存在, 则返回 1, 否则返回 0 。 要求:
- 给出算法的基本设计思想。
- 根据设计思想, 采用 C 或 C++语言描述算法, 关键之处给出注释。
- 说明你所设计算法的时间复杂度和空间复杂度。
分析
解
- 算法的基本设计思想
本算法题属于送分题, 题干已经告诉我们算法的思想。对于采用邻接矩阵存储的无向图, 在邻接矩阵的每一行 (列) 中, 非零元素的个数为本行 (列) 对应顶点的度。可以依次计算连通图
- 算法实现
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
}- 时间复杂度和空间复杂度
算法需要遍历整个邻接矩阵,所以时间复杂度是 O(n^2) ,空间复杂度是 O(1) 。