Python 卡蒂斯八皇后运动
正在尝试Python()中的八皇后问题 我已经编写了一些代码,这些代码适用于我在过去一个小时所能想象的所有输入,但该程序仍然无法通过Kattis测试用例 这不是很有效率,也不是很有条理,但既然问题不需要速度,我就不在乎了 我所做的是检查每个位置,如果有一个女王在那里-我检查水平,垂直,和对角线。我想可能是对角线检查代码错了,因为另外两个代码非常简单,但我无法理解 编辑:请求粘贴有问题的代码,不了解原因,但确定: Edit2:通过添加计数器来编辑代码,以确保有8个皇后 Edit3:修复了上一个bug,代码现在可以运行了Python 卡蒂斯八皇后运动,python,Python,正在尝试Python()中的八皇后问题 我已经编写了一些代码,这些代码适用于我在过去一个小时所能想象的所有输入,但该程序仍然无法通过Kattis测试用例 这不是很有效率,也不是很有条理,但既然问题不需要速度,我就不在乎了 我所做的是检查每个位置,如果有一个女王在那里-我检查水平,垂直,和对角线。我想可能是对角线检查代码错了,因为另外两个代码非常简单,但我无法理解 编辑:请求粘贴有问题的代码,不了解原因,但确定: Edit2:通过添加计数器来编辑代码,以确保有8个皇后 Edit3:修复了上一个bu
import sys
import math
def horizontal(j, row):
for k in range(8):
if k == j:
continue
if row[k] == '*':
return False
return True
def vertical(rows, row , column):
for i in range(8):
if i == row:
continue
if rows[i][column] == '*':
return False
return True
def diagonal(rows, row, column):
#first diagonal
current_row = row
current_col = column
#go furthest up
while True:
if current_col == 0 or current_row == 0:
break
current_col-=1
current_row-=1
while True:
if current_row == row and current_col == column:
if current_col == 7 or current_row == 7:
break
current_col += 1
current_row += 1
continue
if rows[current_row][current_col] == '*':
return False
if current_col == 7 or current_row == 7:
break
current_col += 1
current_row += 1
#other diagonal
current_row = row
current_col = column
while True:
if current_col == 7 or current_row == 0:
break
current_col+=1
current_row-=1
while True:
if current_row == row and current_col == column:
if current_col == 0 or current_row == 7:
break
current_col -= 1
current_row += 1
continue
if rows[current_row][current_col] == '*':
return False
if current_col == 0 or current_row == 7:
break
current_col -= 1
current_row += 1
return True
rows = []
for i in range(8):
rows.append(sys.stdin.readline().rstrip())
valid = True
counter = 0
#for every row:
for row in range(8):
for column in range(8):
if rows[row][column] == '*':
counter += 1
if not (horizontal(column,rows[row]) and vertical(rows, row, column) and diagonal(rows, row, column)):
valid = False
break
if not valid:
break
if valid and counter == 8:
print("valid")
else:
print("invalid")
你没有检查以确保棋盘上有8个皇后。传入一个空板,你的程序就会说它是有效的
num_queens = 0
for row in range(8):
for column in range(8):
if rows[row][column] == '*':
num_queens += 1
...
if num_queens != 8:
valid = False
请将代码粘贴到问题中,不要粘贴到其他网站。问题是什么?您是否要求我们对您的项目进行代码审查并找出其不起作用的原因?是否所有样本输入都通过了?请参阅:@RPGillespie样本通过了,以及我能想象到的所有其他测试。问题是:你能看到任何明显的缺陷吗?你能想象一个我的代码停止运行的测试用例吗?噢,lol甚至没有意识到这是一个要求,他们的措辞很糟糕。。谢谢你,伙计@Krilliminell如果
有效
但不是计数器==8
,会发生什么情况?你的程序只是在不打印任何内容的情况下终止吗?是的,哈哈,刚才看到了,现在就修复了!这个网站的否决票是怎么回事?为什么人们对一个随机的问题投反对票?我应该换一种方式发布吗?@Krilliminell不会把落选票放在个人身上。“查找我的bug”问题是不受欢迎的,因为它们一次只能帮助一个人。StackOverflow的目标是创建一个有利于多人的问题集合。由于以下几个原因,您获得了否决票—(1)这是一篇“家庭作业帮助”/“查找我的bug”类型的帖子,只对您有利,(2)您粘贴了大量代码,而理想情况下,您应该只粘贴一个包含问题的小片段。不要把它看成是个人问题——只是在下一个问题上做得更好,自己回答几个问题,以回馈社区!我完全同意你的看法,他们没有恰当地说明这个问题。对我来说,一个少于8个皇后的电路板并不是解决8个皇后问题的无效方案,它是一个无效的输入。这就像要求我们确保每行没有9个字符而不是8个,或者所有空格都用点而不是逗号表示。这些东西与解决方案无关,只是输入错误。