zoukankan      html  css  js  c++  java
  • 蓝桥杯 王、后传说 dfs

    问题描述
      地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横、坚、斜线位置。
      看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地。各皇后都有自己的势力范围,但也总能找到相安无事的办法。
      所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死......
      现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不能使用(如果国王在王宫的边上,占用的格子可能不到9个)。当然,皇后也不会攻击国王。
      现在知道了国王的位置(x,y)(国王位于第x行第y列,x,y的起始行和列为1),请问,有多少种方案放置n个皇后,使她们不能互相攻击。
    输入格式
      一行,三个整数,皇宫的规模及表示国王的位置
    输出格式
      一个整数,表示放置n个皇后的方案数
    样例输入
    8 2 2
    样例输出
    10
    数据规模和约定
      n<=12
    最基本的n皇后问题我又忘记怎么做了,复习复习复习复习。
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int ans; //答案 
     4 int n; //棋盘规模 
     5 int mp[20][20]; //棋盘 
     6 bool col[15], x1[30], x2[30]; // 标识列和两条对角线
     7 bool check(int r, int i) { //检查第r行第i列是否可以放 
     8     if (!col[i] && !x1[r + i] && !x2[r - i + 12]) { //这一点所在的列,所在的左对角线,所在的右对角线没放过 
     9         return true;
    10     }
    11     return false;
    12 } 
    13 void init(int a, int b) { //国王所在的9个方格不能放,标识为1 
    14     mp[a - 1][b - 1] = 1, mp[a - 1][b] = 1, mp[a - 1][b + 1] = 1, mp[a][b -1] = 1;
    15     mp[a][b] = 1, mp[a][b + 1] = 1, mp[a + 1][b - 1] = 1, mp[a + 1][b] = 1;
    16     mp[a + 1][b + 1] = 1;
    17 }
    18 void dfs(int r) { // 搜索到第r行
    19     if (r == n + 1) { //搜索完了 
    20         ans++;
    21         return;
    22     } 
    23     for (int i = 1; i <= n; i++) { //遍历所有列 
    24         if (check(r, i) && mp[r][i] != 1) { // 如果r行i列可以放 
    25             col[i] = x1[r + i] = x2[r - i + 12] = true; // i列,r + i对角线,r - i对角线标记一下 
    26             dfs(r + 1); // 进入下一行 
    27             col[i] = x1[r + i] = x2[r - i + 12] = false; //回溯,取消标记 
    28         }
    29     }
    30 }
    31 int main() {
    32     int a, b;
    33     cin >> n >> a >> b;
    34     init(a, b); //处理国王的9个格子 
    35     dfs(1); //从第一行开始搜索 
    36     cout << ans << endl;
    37     return 0;
    38 }
  • 相关阅读:
    groovy 执行shell
    expect 用法
    shebang解释
    docker 安装
    centos7 lvm添加硬盘后扩展磁盘空间
    scoped的原理和deep深度选择器的妙用
    swagger3
    帮评网
    反射工具
    网络只能传输二进制
  • 原文地址:https://www.cnblogs.com/fx1998/p/12654268.html
Copyright © 2011-2022 走看看