c++ - 修复 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 的值,而不会出现任何问题?
解决方案
简单的解决方案是使用向量。
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();
.
推荐阅读
- c# - OData 和 Cosmos DB
- c++ - C ++字符串文件重定向差异?
- swift - 如何从字典中删除所有 Int 值?
- swift - 表达式类型“@lvalue CGPoint”在没有更多上下文的情况下模棱两可
- javascript - 如何使用变量更改javascript中的样式?
- c - 代码似乎无法正确打印连接的字符串
- jquery - jQuery 可以在内存中的 HTML 结构上工作吗?
- php - 我想使用 unix 套接字而不是 TCP 连接到我的 PHP-FPM 代理,我使用的是 Centos7
- java - 格式化输出中出现意外的空白
- python - 如何在 python 中获取 ROS MSG 长度?