因此,输入是一个10x10战舰场,代码检查战舰的定位是否有效
特别是对于该矩阵:
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 1, 0, 1, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 1, 0, 0, 1, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 1, 0, 0, 0]
[1, 0, 1, 0, 1, 0, 1, 0, 0, 0]
[1, 0, 1, 0, 0, 0, 0, 0, 0, 0]
shipsize函数达到“IndexError:list index out-range”(索引器:列表索引超出范围),这对 我
def validate_battlefield(field):
ships = {}
for row in range(len(field[0])):
for col in range(len(field)):
if field[row][col] == 1:
try:
result = Shipsize(row, col, field)
ships[result] = ships.get(result, 0) + 1
except ValueError:
return False
return ships.get(4, 0) == 1 and ships.get(3, 0) == 2 and ships.get(2, 0) == 3 and ships.get(1, 0) == 4
def ValidCorner(row, col, field):
if row == len(field) - 1:
return True
if col == 0:
return field[row + 1][col + 1] != 1
if col == len(field[0]) - 1:
return field[row + 1][col - 1] != 1
return field[row + 1][col + 1] != 1 and field[row + 1][col - 1] != 1
def ValidSide(row, col, field):
if row == len(field) - 1 or col == len(field[0]) - 1:
return True
return not (field[row + 1][col] != 0 and field[row][col + 1] != 0)
def ValidPoint(row, col, field):
return ValidCorner(row, col, field) and ValidSide(row, col, field)
def Shipsize(row, col, field):
if not ValidPoint(row, col, field):
raise ValueError('Nope')
field[row][col] = -1
if row < len(field) and field[row+1][col] == 1:
return 1 + Shipsize(row + 1, col, field)
if col < len(field[0]) and field[row][col+1] == 1:
return 1 + Shipsize(row, col + 1, field)
return 1
目前没有回答
相关问题 更多 >
编程相关推荐