【发布时间】:2021-05-05 10:33:32
【问题描述】:
这个问题来自GFG:https://practice.geeksforgeeks.org/problems/n-queen-problem0315/1#(N皇后问题)
这是我的代码:
#include<bits/stdc++.h>
using namespace std;
int valid;
class Solution{
public:
bool isSafe(int n, int arr[n][n], int row, int col){
int i,j;
for(i=0;i<col;i++){
if(arr[row][i]){
return false;
}
}
for(i=row,j=col;i>=0&&j>=0;i--,j--){
if(arr[i][j]){
return false;
}
}
for(i=row,j=col;i<n&&j>=0;i++,j--){
if(arr[i][j]){
return false;
}
}
return true;
}
void QueenUtil(int n, int arr[n][n], int col, vector<vector<int>> &ans){
if(col==n){
valid=1;
vector<int> v;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(arr[j][i]){
v.push_back(j);
}
}
}
ans.push_back(v);
return;
}
for(int i=0;i<n;i++){
if(isSafe(n,arr,i,col)){
arr[i][col] = 1;
QueenUtil(n,arr,col+1,ans);
arr[i][col] = 0;
}
}
}
vector<vector<int>> nQueen(int n) {
// code here
valid=0
vector<vector<int>> ans(n);
int arr[n][n];
memset(arr,0,sizeof(arr));
int col = 0;
QueenUtil(n,arr,col,ans);
return ans;
}
};
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
Solution ob;
vector<vector<int>> ans = ob.nQueen(n);
if(ans.size()==1){
cout<<-1<<endl;
}else{
for(int i=0;i<ans.size();i++){
cout<<"[";
for(int u:ans[i]){
cout<<u<<" ";
}
cout<<"] ";
}
cout<<endl;
}
}
return 0;
}
这是编译错误:
prog.cpp:8:33: error: use of parameter outside function body before ‘]’ token
bool isSafe(int n, int arr[n][n], int row, int col){
^
prog.cpp:8:36: error: use of parameter outside function body before ‘]’ token
bool isSafe(int n, int arr[n][n], int row, int col){
^
prog.cpp:8:37: error: expected ‘)’ before ‘,’ token
bool isSafe(int n, int arr[n][n], int row, int col){
^
prog.cpp:8:39: error: expected unqualified-id before ‘int’
bool isSafe(int n, int arr[n][n], int row, int col){
【问题讨论】:
-
您不能像在 C++ 中那样声明二维数组。由于
n小于10,这里最简单的方法是声明int arr[10][10]。
标签: c++ error-handling compiler-errors c++14 out-of-memory