问答

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

作者:admin 2021-05-05 我要评论

方式一 #include iostreamusing namespace std;const int N = 10;char grid[N][N];// 下面2行变量的定义顺序int n;int row[N], col[N], dg[N], udg[N];void dfs(...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

方式一

#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++相关的问题,麻烦解答一下,谢谢。

###
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。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • C++ N 皇后问题,变量定义的顺序影响结

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

  • vscode 无法识别 constexpr

    vscode 无法识别 constexpr

  • nodejs文字点选验证

    nodejs文字点选验证

  • js for循环根据条件数据格式改造.

    js for循环根据条件数据格式改造.

腾讯云代理商
海外云服务器