#include <stdio.h> const int N = 10; int i,j,k,h; //判断无向图是否欧拉图 //返回值为奇度数结点数 int euler1(int** a, int n){ //**********************begin*********************************** for( i=0;i<n;i++){ for(j=0;j<n;j++){ if(a[i][j]==1&&a[j][i]==1){ k+2;} else{ k+1; } } } if(k%2==0){ return 0;} else{ return 2; } } int main( ) { int** a1;//无向图 int n, i, j; scanf("%d", &n);//读入结点数 if (n > N) { printf("error\n"); return 0; } a1 = new int* [n]; for (i = 0; i < n; i++) { a1[i] = new int[n]; for (j = 0; j < n; j++) { a1[i][j] = 0; } } while (1) { scanf("%d%d", &i, &j);//读入无向边 //********************begin************************* a1[i][j]=1; a1[j][i]=1; if(i==-1||j==-1) break; //******************end***************************** } int odd = euler1(a1, n); if (odd == 0) { printf("a is euler\n"); } else if (odd == 2) printf("a is semi-euler\n"); else printf("a is not euler\n"); }
时间: 2023-07-18 07:40:06 浏览: 104
好的,我根据您提供的代码进行了修改,修改后的代码如下:
```c++
#include <stdio.h>
const int N = 10;
int i, j, k = 0, h;
//判断无向图是否欧拉图
//返回值为奇度数结点数
int euler1(int** a, int n) {
//**********************begin***********************************
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (a[i][j] == 1 && a[j][i] == 1) {
k += 2;
}
else {
k += 1;
}
}
}
if (k % 2 == 0) {
return 0;
}
else {
return k / 2;
}
}
int main() {
int** a1; //无向图
int n, i, j;
scanf("%d", &n); //读入结点数
if (n > N) {
printf("error\n");
return 0;
}
a1 = new int* [n];
for (i = 0; i < n; i++) {
a1[i] = new int[n];
for (j = 0; j < n; j++) {
a1[i][j] = 0;
}
}
while (1) {
scanf("%d%d", &i, &j); //读入无向边
//********************begin*************************
if (i == -1 || j == -1) {
break;
}
a1[i][j] = 1;
a1[j][i] = 1;
//******************end*****************************
}
int odd = euler1(a1, n);
if (odd == 0) {
printf("a is euler\n");
}
else if (odd == 1) {
printf("a is semi-euler\n");
}
else {
printf("a is not euler\n");
}
// 释放动态分配的内存
for (i = 0; i < n; i++) {
delete[] a1[i];
}
delete[] a1;
return 0;
}
```
主要修改如下:
1. 在 `euler1` 函数中,修改了计算奇度数结点数的方式,计算结果为 k/2。同时,增加了变量 `k` 的初始化。
2. 在 `main` 函数中,将判断结束条件的位置移到读入无向边之后,避免出现重复计算无向边。
3. 修改了输出语句,使其符合题目要求。
4. 最后,添加了动态内存的释放操作。
希望对您有所帮助。
阅读全文