C++ N 皇后问题,变量定义的顺序影响结果
方式一
#include <iostream>
using namespace std;
const int N = 10;
char grid[N][N];
// 下面2行变量的定义顺序
int n;
int row[N], col[N], dg[N], udg[N];
void dfs(int u){
if(u == n){
for(int i=0; i<n; i++)puts(grid[i]);
puts("");
}
for(int i=0;i<n; i++){
if(!row[i] && !col[i] && !dg[i+u] && !udg[i-u+n]){
row[i]= col[i] = dg[i+u] = udg[i-u+n] = 1;
grid[u][i] = 'Q';
dfs(u+1);
row[i] = col[i] = dg[i+u] = udg[i-u+n]=0;
grid[u][i] ='.';
}
}
}
int main(){
cin>>n;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++) grid[i][j] ='.';
dfs(0);
}
输入: 6
结果
.Q....
...Q..
.....Q
Q.....
..Q...
....Q.
..Q...
.....Q
.Q....
....Q.
Q.....
...Q..
...Q..
Q.....
....Q.
.Q....
.....Q
..Q...
....Q.
..Q...
Q.....
.....Q
...Q..
.Q....
方式二
#include <iostream>
using namespace std;
const int N = 10;
char grid[N][N];
// 定义变化
int row[N], col[N], dg[N], udg[N];
int n;
void dfs(int u){
if(u == n){
for(int i=0; i<n; i++)puts(grid[i]);
puts("");
}
for(int i=0;i<n; i++){
if(!row[i] && !col[i] && !dg[i+u] && !udg[i-u+n]){
row[i]= col[i] = dg[i+u] = udg[i-u+n] = 1;
grid[u][i] = 'Q';
dfs(u+1);
row[i] = col[i] = dg[i+u] = udg[i-u+n]=0;
grid[u][i] ='.';
}
}
}
int main(){
cin>>n;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++) grid[i][j] ='.';
dfs(0);
}
输入 6
结果
.Q....
...Q..
.....Q
Q.....
..Q...
....Q.
...Q..
Q.....
....Q.
.Q....
.....Q
..Q...
从表象来看是变量的定义顺序,具体是什么问题不清楚,没有查询到c++相关的问题,麻烦解答一下,谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
dg和udg是标记对角线数组,而一个方向的对角线有n*2-1条,而非n条。
dg[i+u]=1数组越界,因为i+u最大为10。