c++ - 我正在尝试使用回溯解决 N 皇后问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
问题描述
我正在尝试使用回溯解决“N Queen Problem”,但由于某些错误,它显示运行时错误。在编译时它显示运行时错误并给出消息dynamic-stack-buffer-overflow on address ******
多次检查代码,但无法找到问题的根源
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> result;
vector<string> temp;
int arr[n]={0};
arr[0]=99;
vector<int> queen;
calc(result,n,temp,arr,0,queen);
return result;
}
void calc(
vector<vector<string>>& result,
int n, vector<string>& temp,
int * arr,
int count,
vector<int>& queen
) {
if(count==n)
{
for(int k=0;k<queen.size();k++)
{
string s="";
for(int m=1;m<=n;m++)
{
if(m==queen[k])
s=s+'Q';
else
s=s+'.';
}
temp.push_back(s);
}
result.push_back(temp);
}
else{
for(int i=1;i<=n;i++)
{
if(arr[i]==0)
{
int temp1[n]={0};
temp1[0]=99;
for(int j=1;j<=n;j++)
{
temp1[j]=arr[j]+temp1[j];
if(arr[j]!=0)
temp1[j+1]++;
}
queen.push_back(i);
temp1[i]++;
calc(result,n,temp,temp1,count+1,queen);
queen.pop_back();
}
}
}
}
};
解决方案
for(int i=1;i<=n;i++)
{
if(arr[i]==0)
的有效索引arr
是 0 到n-1
。在此循环的最后一次迭代中,wheni == n
表现arr[i]
出未定义的行为,通过访问越界的索引。
与内循环类似temp1[j]
,甚至更是如此。temp1[j+1]
推荐阅读
- r - 如何增加您可以在 R 的 view() 中读取的行数
- keras - 有没有办法从 Keras 的自动编码器中获取任何层的特征?
- gitlab - 错误:在 GitLab 管道中无法访问声纳服务器“http://localhost:9000”
- java - 如何在 Java 8 中访问嵌套流中的单个对象流?
- google-apps-script - 在特定行范围内将数据匹配项从一张表复制到另一张表 Google Apps 脚本
- vba - 获取过滤行数并将结果粘贴到列中
- python - 来自 EKS 上运行的容器的 Cx_Oracle DB 连接问题
- javascript - 将 MongoDB localhost 与 NodeJS 连接时出现问题
- python - 在 vscode 中调试 python “包命令”
- nosql - 有没有办法索引 Oracle NoSQL 数据库中记录数组中的所有项目?