题目 1460: 蓝桥杯基础练习VIP-2n皇后问题
时间限制: 1Sec 内存限制: 128MB 提交: 2016 解决: 1003
题目描述
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。
输入
输入的第一行为一个整数n,表示棋盘的大小。 n小于等于8
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。
输出
输出一个整数,表示总共有多少种放法。
样例输入复制
4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
样例输出复制
2
这个题,真是超出了我的能力范围了
首先先解决n皇后问题
两种实现+详细图解 51. N 皇后 - N 皇后 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/n-queens/solution/liang-chong-shi-xian-xiang-xi-tu-jie-51-n-huang-ho/2021第十二届蓝桥杯青少组省赛Python第6题(八皇后问题)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PL4y1e7N3?from=search&seid=9559549002194000112&spm_id_from=333.337.0.0这是map函数
Python map() 函数 | 菜鸟教程 (runoob.com)https://www.runoob.com/python/python-func-map.html这是递归
n=int(input())
amount=0
zuoshang=1
zuoxia=1
lie=1
qipan=[]
for i in range(n):
qipan.append(list(map(int,input().split())))
def mark(x,y):
global lie,zuoshang,zuoxia
zuoshang=1
zuoxia=1
lie=1
print("零")
for i in range(x):
if(qipan[i][y]==0):
lie=0
print("一")
break
i=x
j=y
while (i>=0 and j>=0):
if(qipan[i][j]==0 ):
zuoshang=0
print("二")
break
i-=1
j-=1
i=x
j=y
while (i>=0 or j<=n-1):
if(qipan[i][j]==0 ):
zuoxia=0
print("三")
break
i-=1
j+=1
def put(x):
print(x)
global amount
if (x==n-1):
amount+=1
return
for y in range(n):
mark(x,y)
print(lie,zuoshang,zuoxia)
if(zuoshang==1 and zuoxia==1 and lie==1):
qipan[x][y]=0
print(qipan)
put(x+1)
qipan[x][y]=1
put(0)
print(amount)
运行结果如下
先这样吧,拖了好几天不知道怎么搞