首页 > 其他分享 >843 n皇后

843 n皇后

时间:2022-10-10 23:56:30浏览次数:40  
标签:843 int dfs ++ 对角线 皇后

用深度优先解决n皇后问题(一条路走到黑不行再换路)

#include<bits/stdc++.h>
using namespace std;

const int N = 20;  
char g[N][N];                                            //这个储存棋盘
bool col[N], dg[N], udg[N];                              //记录同列 同对角线 同反对角线是否已经放了皇后
//默认是fasle
int n;

void dfs(int u) {
    if (u == n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << g[i][j];
            }
            cout << endl;
        }
        cout << endl;
        return;
    }
    for (int i = 0; i < n; i++) {
        if (!col[i] && !dg[u + i] && !udg[n - u + i]) {   //当列 对角线 斜对角线都没有皇后的时候
            g[u][i] = 'Q';
            col[i] = dg[u + i] = udg[n - u + i] = true;
            dfs(u + 1);                                   
            g[u][i] = '.';                                //走完回来要复原
            col[i] = dg[u + i] = udg[n - u + i] = false;
        }
    }
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            g[i][j] = '.';                         //先全部是点  .
        }
    }
    dfs(0);
}

标签:843,int,dfs,++,对角线,皇后
From: https://www.cnblogs.com/echoT/p/16777855.html

相关文章

  • 递归之八皇后问题
    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两......
  • N皇后 【回溯算法】
    51.N皇后-力扣(LeetCode) 核心:1.按照层去选择2.使用String.copyValueOf(char[])将char数组转成StringclassSolution{List<List<String>>res;publ......
  • LeetCode 51 n皇后
    constintN=20;classSolution{public:vector<vector<string>>res;boolcol[N],dg[N],udg[N];voiddfs(intu,intn,vector<string>&pa......
  • P8431 题解
    前言题目传送门!更好的阅读体验?这题题解都写得特别复杂,蒟蒻看不懂。因此,我补一篇简单的贪心题解。思路题目等同于求最小的\(p\)使得\(f(p)>n\),则\((p-1)\)就是答......
  • n皇后问题
    棋盘上的对角线都满足这样的特点,要么横纵坐标之和相等,要么横纵坐标之差相等。所以可以用两个判断数组标记两种对角线有没有被皇后控制,然后逐行搜索,每行只有一个皇后,所以不......
  • N 皇后问题
    试题分析:由八皇后问题,我们可以推出n皇后问题的解法,我们定义了一个函数用来检查当前列,当前对角线是否有皇后(因为我们是一行一行遍历,所以不需要检查行),如果可以放置,我们就放置......
  • P2123 皇后游戏 纯推导过程
    没做过 P1080[NOIP2012提高组]国王游戏的可以去做做()这道题的大臣是有全序关系的(就是说可以比较优劣且具有传递性),所以直接定义小于号排序就好了。以下是......