c #include <stdio.h> #define MAX_VERTICES 100 int adjMatrix[MAX_VERTICES][MAX_VERTICES]; //邻接矩阵 int degree[MAX_VERTICES]; //每个顶点的度数 //获取无向图中的顶点的度数 void getDegree(int V) { for (int i = 0; i < V; ++i) { degree[i] = 0; for (int j = 0; j < V; ++j) { if (adjMatrix[i][j]) { degree[i]++; } } } } //判断无向图是否为欧拉图 int isEulerian(int V) { getDegree(V); for (int i = 0; i < V; ++i) { if (degree[i] % 2 != 0) { return 0; } } return 1; } int main() { int V, E; //V表示无向图中的顶点数,E表示无向图中的边数 printf("请输入无向图的顶点数和边数:"); scanf("%d%d", &V, &E); //初始化邻接矩阵 for (int i = 0; i < V; ++i) { for (int j = 0; j < V; ++j) { adjMatrix[i][j] = 0; } } //读入边信息,构建邻接矩阵 for (int i = 0; i < E; ++i) { int v1, v2; printf("请输入第%d条边的两个顶点:", i + 1); scanf("%d%d", &v1, &v2); adjMatrix[v1][v2] = adjMatrix[v2][v1] = 1; } if (isEulerian(V)) { printf("该无向图是欧拉图!\n"); } else { printf("该无向图不是欧拉图!\n"); } return 0; }
时间: 2024-04-26 21:22:06 浏览: 79
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码实现了判断一个无向图是否为欧拉图。如果一个无向图的所有顶点的度数都是偶数,则这个无向图是欧拉图;如果有且仅有两个顶点的度数是奇数,其余顶点的度数都是偶数,则这个无向图是半欧拉图;否则,这个无向图既不是欧拉图也不是半欧拉图。
这段代码使用了邻接矩阵来存储无向图的信息,同时使用了一个degree数组记录每个顶点的度数。在getDegree函数中,通过遍历邻接矩阵,计算出每个顶点的度数。在isEulerian函数中,遍历degree数组,判断每个顶点的度数是否为偶数,来判断无向图是否为欧拉图。
需要注意的是,在输入边信息时,这段代码假设无向图的顶点编号从0到V-1。如果顶点编号从1开始,则需要对输入的顶点编号进行相应的调整。
阅读全文