首页 > 解决方案 > 修复 C++ 中引用变量的输入问题

问题描述

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问题代码的一部分,我使用 Now 将N定义为 8 #define N 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);

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

标签: c++arraysscopeiostream

解决方案


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

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();
    ...
}

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


推荐阅读