指出下列代码中的错误并改正#include <stdio.h> const int N = 10; int euler1(int** a, int n) { int odd_count = 0; for (int i = 0; i < n; i++) { int degree = 0; for (int j = 0; j < n; j++) { degree += a[i][j]; } if (degree % 2 == 1) { odd_count++; } } return odd_count; } 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); if (i == -1 && j == -1) { break; } a1[i][j] = 1; a1[j][i] = 1; } 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"); } return 0; }
时间: 2024-02-14 22:10:56 浏览: 27
该代码的错误是使用了 C 语言风格的二维数组,但是传递给函数时使用的是指针类型。应该使用 C++ 的动态数组或者使用 `vector` 类型。
修改后的代码如下:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int N = 10;
int euler1(vector<vector<int>>& a, int n) {
int odd_count = 0;
for (int i = 0; i < n; i++) {
int degree = 0;
for (int j = 0; j < n; j++) {
degree += a[i][j];
}
if (degree % 2 == 1) {
odd_count++;
}
}
return odd_count;
}
int main() {
vector<vector<int>> a1;
int n, i, j;
cin >> n;
if (n > N) {
cout << "error" << endl;
return 0;
}
a1.resize(n);
for (i = 0; i < n; i++) {
a1[i].resize(n);
for (j = 0; j < n; j++) {
a1[i][j] = 0;
}
}
while (1) {
cin >> i >> j;
if (i == -1 && j == -1) {
break;
}
a1[i][j] = 1;
a1[j][i] = 1;
}
int odd = euler1(a1, n);
if (odd == 0) {
cout << "a is euler" << endl;
} else if (odd == 2) {
cout << "a is semi-euler" << endl;
} else {
cout << "a is not euler" << endl;
}
return 0;
}
```
这个版本使用了 `vector` 类型,可以方便地动态创建二维数组,并且传递给函数时也可以直接使用引用。