Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #python 3.6.9
- from copy import deepcopy
- # обрабатываем законченную расстанвку ферзей
- def printResult(field):
- # проверяем, что ферзей нужное количество
- queensCount = 0
- for r in field:
- for c in r:
- if c == 2:
- queensCount += 1
- if queensCount != len(field): return 0
- # печатаем
- print("\n".join(" ".join("X" if field[r][c] == 2 else "-" for c in range(len(field[r]))) for r in range(len(field))))
- print("\n")
- return 1
- # ставим ферзя в строку row
- def placeQueen (field, row):
- #если поле завершено, выходим
- if row >= len(field):
- printResult(field)
- return None
- result = []
- for col in range(len(field[row])):
- if field[row][col]:
- continue
- f = [
- [field[r][c] if field[r][c]
- else 2 if (row==r) and (col==c)
- else 1 if (row==r) or (col==c) or (abs(r-row)==abs(c-col))
- else 0
- for c in range(len(field[r]))]
- for r in range(len(field))
- ]
- result += [(f, row+1)]
- return result
- # НАЧАЛЬНЫЕ ДАННЫЕ
- # размер поля
- N = 8
- # НАЧАЛО ПРОГРАММЫ
- field = [[0 for c in range(N)] for r in range(N)]
- # поиск "в глубину"
- stack = [(field, 0)]
- steps = 0
- stackDepth = 0
- while stack != []:
- steps += 1
- # вытаскиваем очередной элемент из стека
- item, stack = stack[0], stack[1:]
- # генерируем на его основе новые элементы
- newItems = placeQueen(*item)
- # помещаем их в начало стека
- if newItems:
- stack = newItems + stack
- if stackDepth < len(stack):
- stackDepth = len(stack)
- print("Поиск в глубину завершен. Обработано элементов:", steps, "Максимальная глубина стека: ", stackDepth)
- # поиск "в ширину"
- queue = [(field, 0)]
- steps = 0
- queueLength = 0
- while queue != []:
- steps += 1
- # вытаскиваем очередной элемент из очереди
- item, queue = queue[0], queue[1:]
- # генерируем на его основе новые элементы
- newItems = placeQueen(*item)
- # помещаем их в конец очереди
- if newItems:
- queue = queue + newItems
- if queueLength < len(queue):
- queueLength = len(queue)
- print("Поиск в ширину завершен. Обработано элементов:", steps, "Максимальная глубина очереди: ", queueLength)
- # КОНЕЦ ПРОГРАММЫ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement