C++ N 皇后问题,变量定义的顺序影响结果

发布于 2022-09-12 22:18:11 字数 1832 浏览 13 评论 0

方式一

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

二手情话 2022-09-19 22:18:11
int row[N], col[N], dg[N], udg[N];

dg和udg是标记对角线数组,而一个方向的对角线有n*2-1条,而非n条。

row[i] = col[i] = dg[i+u] = udg[i-u+n] = 1;

dg[i+u]=1数组越界,因为i+u最大为10。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文