Я пишу игру тральщика в python, и в настоящее время я пытаюсь реализовать алгоритм заливки. Это то, что я написал:Python: алгоритм floodfill для minesweeper
def floodfill(CURRENT_BOARD, row, col):
count = count_mines(row, col)
if count in POSSIBLE_MINE_NUMBERS:
CURRENT_BOARD[row][col] = str(count) + ' '
else:
if CURRENT_BOARD[row][col] == 'P ':
CURRENT_BOARD[row][col] = 'P '
if row > 0:
floodfill(CURRENT_BOARD, row - 1, col)
if row < len(BOARD[row]) - 1:
floodfill(CURRENT_BOARD, row + 1, col)
if col > 0:
floodfill(CURRENT_BOARD, row, col - 1)
if col < len(BOARD) - 1:
floodfill(CURRENT_BOARD, row, col + 1)
else:
CURRENT_BOARD[row][col] = ' '
if row > 0:
floodfill(CURRENT_BOARD, row - 1, col)
if row < len(BOARD[row]) - 1:
floodfill(CURRENT_BOARD, row + 1, col)
if col > 0:
floodfill(CURRENT_BOARD, row, col - 1)
if col < len(BOARD) - 1:
floodfill(CURRENT_BOARD, row, col + 1)
вещи, чтобы отметить:
POSSIBLE_MINE_NUMBERS = [1,2,3,4,5,6,7,8]
count_mines является функцией, которая подсчитывает количество мин в окружающих 8 квадратов подряд, собр.
Совет (CURRENT_BOARD) - это список списков.
'P' представляет флаг, алгоритм должен пропускать флаги.
'' представляет собой пустое пространство на доске.
Проблема в том, когда она называется, я получаю кучу ошибок, прежде чем она переполнит стек вызовов, и мне интересно, что я сделал неправильно.
У вас есть вопросы? – Eric
Упс! Добавил мой вопрос @Eric – JavascriptLoser
Как вы определяете, была ли обнаружена плитка? Первое, что вы должны сделать в своей функции, - проверить, все ли покрыта плитка. В противном случае вы пытаетесь вскрыть одни и те же фрагменты снова и снова. –