题目描述

给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后
和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两
个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。

输入解释

输入的第一行为一个整数n,表示棋盘的大小。
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,

如果一个整数为0,表示对应的位置不可以放皇后。

输出解释

输出一个整数,表示总共有多少种放法。

输入样例

No.1
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

No.2
4
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1

输出样例

No.1
2

No.2
0

1.题目分析

这道题使用两个dfs深度搜索算法来解决,白皇后全部放完后再放入黑皇后。

用两个一维数组存储白皇后和黑皇后的放置位置,数组下标代表行,内容代表列。如ListW[2]代表白皇后在第3行(数组从0开始)的位置

两个函数分别判断白皇后和黑皇后即将放入的位置上面的行中是否有在同一列或者在同一对角线

2.源码

themax = int(input())  #获取棋盘边界
canInput = []          #二维数组来保存能否放置
for i in range(themax):canInput.append(list(map(int, input().split())))ListW = [0] * 8  #白皇后放置位置
ListB = [0] * 8     #黑皇后放置位置
nums = 0 #记录总数#检查白皇后是否可以放入
def checkW(row, columu): #如果在第一行则直接放入if row ==0: return True#循环上面的行中是否存在冲突for i in range(row):if ListW[i] == columu or abs(row-i) == abs(columu-ListW[i]):return Falsereturn True#检查黑皇后是否可以放入
def checkB(row, columu): #如果白皇后在这个位置 则不可放入if ListW[row] == columu: return False#如果在第一行则直接放入if row ==0:   return True#循环上面的行中是否存在冲突for i in range(row):   if ListB[i] == columu or abs(row-i) == abs(columu-ListB[i]):return Falsereturn Truedef dfsW(n):   #最后一行被填上时调用黑皇后dfsif n == themax:dfsB(0)else:for i in range(themax):if canInput[n][i] == 0:continueelif checkW(n, i) == False:continueelse:ListW[n] = idfsW(n + 1)def dfsB(n):#最后一行被填入时候num+1if n == themax:global numsnums += 1else:for i in range(themax):if canInput[n][i] == 0:continueelif checkB(n, i) == False:continueelse:ListB[n] = idfsB(n + 1)dfsW(0)
print(nums)

蓝桥杯2N皇后问题-使用Python实现相关推荐

  1. 蓝桥杯 2n皇后(java递归回溯)

    一.2n皇后问题 问题描述: 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在 ...

  2. 蓝桥杯青少创意编程python组

    第十二届蓝桥杯青少年组国赛C++中级组 第1题 -- 第3题(python3实现) 第十二届蓝桥杯青少年组国赛C++中级组 第1题 -- 第3题(python3实现)_dllglvzhenfeng的博 ...

  3. 蓝桥杯之算法模板题 Python版

    蓝桥杯之算法模板题 Python版 文章目录 蓝桥杯之算法模板题 Python版 线段树 DP 动态规划 dp, LIS ** 01背包 完全背包 多重背包 混合背包 分组背包 区间DP 一.什么是区 ...

  4. 蓝桥杯 基础练习 分解质因数 python语言

    蓝桥杯 基础练习 分解质因数 python语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解, ...

  5. 2021年第十二届蓝桥杯软件类省赛python组试题及其解析。

    目录 一.卡片 二.直线 三.货物摆放 四.路径 五.回路计算 六.时间显示 七.杨辉三角 八.左孩子右兄弟 九.异或数列 十.括号序列 一.卡片 本题总分:5分 [问题描述] 小蓝有很多数字卡片,每 ...

  6. 【蓝桥杯Python组】2022年第十三届蓝桥杯省赛B组Python解题思路详解

    第十三届蓝桥杯省赛B组Python解题思路详解 因为今年采用线上的举办方式进行比赛,所以组委会对题目做了一定的调整,将原来的5道填空+5道编程题变成了2道填空+8道编程题,据说是为了防止抄袭.其实题目 ...

  7. 2021年第十二届蓝桥杯软件类省赛python组

    目录 2021年第十二届蓝桥杯软件类省赛python组 1.卡片 常规做法 使用functions.Counter计数 2.直线 3.货物摆放 4.路径 5.回路计算 递归--太慢跑不出来 状态压缩D ...

  8. 蓝桥杯 八皇后 2n皇后问题

    八皇后问题 正式讲解2n皇后问题之前,首先聊聊八皇后问题 题目很简单,8*8棋盘上放上八个皇后,不能放在同一行.列,或者是同对角线. 我在做这题的时候,首先没有参考别人的思路.第一反应是DFS来解决, ...

  9. 蓝桥杯Python-2n皇后问题(和别人的想法有点不一样)

    首先附上问题链接:蓝桥杯基础练习VIP-2n皇后问题 - C语言网 (dotcpp.com) 问题描述: 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使 ...

最新文章

  1. linux 6.7 nfs安装yum,centos7下NFS使用与配置
  2. 深入理解JavaScript类数组
  3. centos ruby通过rvm更新版本
  4. 计算机运维知识题库,(哭求哥哥姐姐帮助一下)计算机维护笔试题库(辛苦了)...
  5. 80x86 CPU 的工作模式
  6. 白鹭php源码,白鹭/CDNDrive
  7. HDU 1240 Asteroids!(DFS简单搜索)
  8. SharePoint 2013创建WCF REST Service
  9. python中文列名报错__mssql.MSSQLDatabaseException:(207,b“无效列名'Hello'。DBLib错误消息20018...
  10. 【交通标志识别】基于matlab GUI BP神经网络交通标志识别【含Matlab源码 718期】
  11. macOS 配置Android SDK 环境变量
  12. 华为云计算培训技术如何革新传统行业
  13. WallpaperEngine壁纸提取工具,pkg文件提取静态图片,pkg文件转jpg,pkg文件转png
  14. Charles接口模拟404/502
  15. ECS 入门到入土: 一、什么是 ECS
  16. 回溯法解决部落冲突问题
  17. [c#] DirectoryInfo.GetDirectories() 能扫描读取到文件夹,目录里却不存在。
  18. 国内9大免费CDN汇总,除了加速乐,你还用过哪些?
  19. 电商营销方式抢购,秒杀Redis原子出队列lpop方法作为剩余库存判断条件的实现方式(2)
  20. java iqq_iQQ 基于WebQQ3.0协议Java开发 跨平台QQ客户端

热门文章

  1. 买电脑主要看什么 买笔记本主要看什么
  2. 09.debounce 方法
  3. python 网站实现扫描二维码关注微信公众号,实现自动登陆
  4. 我的网事——闲话网名之“伯劳.秋香”
  5. 数据压缩实验七——MEPG音频编码
  6. python实现动态壁纸_实战 | Python批量提取Win10锁屏壁纸
  7. 蓝牙耳机怎么连接手机
  8. java最长公共子序列算法_算法学习——java实现最长公共子序列
  9. “山东味”的蘑菇在日本“生根发芽” 成全国最大食用菌菌棒出口基地!
  10. 树莓派3b安装系统noobs