修复 C++ 中引用变量的输入问题

Fixing input problems in C++ for reference variables

bool isSafe(char arr[][N],int r,int c)
{
//to check that queens are not in the same column
for(int i=0;i<=r;i++){
if(arr[i][c]=='Q')
return false;}

//to check that queens are not in the same left diagonal
for(int i=r,j=c;i>=0&&j>=0;i--,j--){
if(arr[i][j]=='Q')
return false;}

//to check that queens are not in the same right diagonal
for(int i=r,j=c;i>=0&&j<N;i--,j++){
if(arr[i][j]=='Q')
return false;}
}

这是 N Queens 问题代码的一部分,我使用 #define N 8N 定义为 8 ] 现在,下面是-

cout<<"The solution(s) are-"<<endl;
char arr[N][N];
memset(arr,'-',sizeof arr);         //initializes the entire n*n chessboard with '-'
solveNQueen(arr,0);

这是在main函数下。但是在这里,我最初将 N 定义为一个常数,等于 8。我不能在 main 下寻找可能的(N)输入语句,因为这会导致 N 的范围问题在 isSafe() 那么在这种情况下,我应该怎么做才能让用户通过终端输入 N 的值,而不会出现任何问题?

简单的解决方案是使用向量。

int n;
cin >> n;
vector<vector<char>> v(n, vector<char>(n));
solveNQueen(v, 0);

bool isSafe(vector<vector<char>>& v,int r,int c)
{
    int n = v.size();
    ...
}

如果您需要知道向量的大小,可以使用大小方法获取它,v.size();