我一直试图找出发生此错误的原因,但一无所获。这是来自回溯的 n-queen 问题的代码。但这没关系。我想知道为什么会发生这个错误以及如何解决它。
#include <iostream>
using namespace std;
bool attack_checking(int arr[][s], int s, int i, int j) {
for(int x = 0; x < s; x++)
if(arr[i][x] == 1)
return true;
for(int x = 0; x < s; x++)
if(arr[x][j] == 1)
return true;
for(int x = 0; x < s; x++) {
for(int y = 0; y < s; y++) {
if(x == i && y == j)
continue;
if((x + y) == (i + j)) {
if(arr[x][y] == 1)
return true;
}
if((x - y) == (i - j)) {
if(arr[x][y] == 1)
return true;
}
}
}
return false;
}
bool queen(int arr[][s], int s, int n) {
if(n == 0)
return true;
for(int i = 0; i < s; i++) {
for(int j = 0; j < s; j++) {
if(attack_checking(arr, s, i, j))
continue;
arr[i][j] = 1;
if(queen(arr, s, n - 1))
return true;
arr[i][j] = 0;
}
}
return false;
}
int main() {
int n, s;
cin>>n;
s = n;
int arr[s][s];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
arr[i][j] = 0;
bool ans = queen(arr, s, n);
if(ans)
{
cout<<"YES\n";
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
cout<<arr[i][j]<<" ";
}
cout<<"\n";
}
}
cout<<"NO";
return 0;
}
new.C:5:32: 错误: 使用未声明的标识符's' bool attack_checking(int arr[][s], int s, int i, int j) { ^
new.C:32:22:错误:使用未声明的标识符“s”
布尔皇后(int arr[][s],int l){ ^
产生 2 个错误。