【发布时间】:2017-11-24 14:41:44
【问题描述】:
在 Python 中尝试八皇后问题 (https://open.kattis.com/problems/8queens)。
我编写了一些代码,适用于过去一小时我所能想象到的所有输入 - 但程序仍然无法通过 Kattis 测试用例。
它不是很有效,也不是很好的结构,但由于问题不应该要求速度,所以我并不在意。
我正在做的是检查每个位置,如果那里有皇后 - 我会检查水平、垂直和对角线。我认为可能是对角线检查代码错误,因为其他两个非常简单,但我无法弄清楚...
编辑:请求粘贴有问题的代码,不明白为什么但确定:
Edit2:通过添加计数器来编辑代码以确保有 8 个皇后。
Edit3:修复了最后一个错误,代码现在可以工作了!
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")
【问题讨论】:
-
请将代码粘贴到问题中,不要粘贴到其他网站。
-
有什么问题?您是否要求我们对您的项目进行代码审查并找出它不工作的原因?
-
所有样本输入都通过了吗?
-
@RPGillespie 样本正在通过,以及我能想象到的所有其他测试。问题是:你能看出任何明显的缺陷吗?你能想象一个我的代码崩溃的测试用例吗?
标签: python