حل سوال 8 وزیر در پایتون
https://lamtakam.com/qanda/3108/حل-سوال-8-وزیر-در-پایتون 0سلام دوستان مسئله معروفی در برنامه نویسی به اسم هشت وزیر هستش مسئله میگه به چند روش میشه 8 تا وزیر رو در یک صفحه شطرنج هشت در هشت چید به طوری که هیچکدوم دیگری رو تحدید نکنن .
این مسئله حلش روش های مختلف داره از جمله الگوریتم ژنتیک و روش بازگشتی یا عقب گرد
خب من نیاز دارم روش عقب گرد رو یادبگیرم و حق استفاده از الگوریتم ژنتیک رو ندارم خیلی گشتم تا تونستم یه آموزش برای توضیح الگوریتمش پیدا کنم کدش رو هم پیدا کردم ولی چون کامنت گذاری مناسبی نداشت متوجه نشدم
ممنون میشم اگر کسی کدش رو میتونه گام به گام توضیح بده چون نیاز خیلی ها میشه من کدی رو هم که دارم قرار میدم
import copy
def take_input():
"""Accepts the size of the chess board"""
while True:
try:
size = int(input('What is the size of the chessboard? n = \n'))
if size == 1:
print("Trivial solution, choose a board size of atleast 4")
if size <= 3:
print("Enter a value such that size>=4")
continue
return size
except ValueError:
print("Invalid value entered. Enter again")
def get_board(size):
"""Returns an n by n board"""
board = [0]*size
for ix in range(size):
board[ix] = [0]*size
return board
def print_solutions(solutions, size):
"""Prints all the solutions in user friendly way"""
for sol in solutions:
for row in sol:
print(row)
print()
def is_safe(board, row, col, size):
"""Check if it's safe to place a queen at board[x][y]"""
#check row on left side
for iy in range(col):
if board[row][iy] == 1:
return False
ix, iy = row, col
while ix >= 0 and iy >= 0:
if board[ix][iy] == 1:
return False
ix-=1
iy-=1
jx, jy = row,col
while jx < size and jy >= 0:
if board[jx][jy] == 1:
return False
jx+=1
jy-=1
return True
def solve(board, col, size):
"""Use backtracking to find all solutions"""
#base case
if col >= size:
return
for i in range(size):
if is_safe(board, i, col, size):
board[i][col] = 1
if col == size-1:
add_solution(board)
board[i][col] = 0
return
solve(board, col+1, size)
#backtrack
board[i][col] = 0
def add_solution(board):
"""Saves the board state to the global variable 'solutions'"""
global solutions
saved_board = copy.deepcopy(board)
solutions.append(saved_board)
size = take_input()
board = get_board(size)
solutions = []
solve(board, 0, size)
print_solutions(solutions, size)
print("Total solutions = {}".format(len(solutions)))