考研数据结构(每日一题)
题目:已知无向连通图G由顶点集V和遍集E组成,|E|>0,当G中度为奇数的顶点个数为不大于2的偶数时,G存在包含所有边且长度为|E|的路径(称为EL路径)。设图G采用邻接矩阵存储。请设计算法 int IsExistEL(MGraph G),判断G是否存在EL路径,若存在,则返回0。
算法思想:
采用邻接矩阵存储无向图,在邻接矩阵的每一行(列)中,非零元素的个数为本行(列)对应的顶点的度。可以依次计算连通图G中各顶点的度,并记录度为奇数的顶点个数,若个数为0或2,则返回1,否则返回0
完整代码:
typedef struct{ //图的定义
int numVerices,numEdges; //图中实际的顶点数和边数
char VerticesList[MAXV]; //顶点表。MAXV为已定义常量
int Edge[MAXV][MAXV]; //邻接矩阵
}MGraph;
int IsExistEL(MGraph G){
int degree,i,j,count = 0;
for (i = 0; i < G.numVerices; i++){
degree = 0;
for(j = 0;j < G.numVerices;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
}
}