N皇后问题
def check_box(row_index):
for i in range(row_index):
if cols[i]==cols[row_index]:
return False
if row_index-i==abs(cols[i]-cols[row_index]):
return False
else:
return True
def set_queen(row_index):
if row_index==queens_num:
res.append(cols[:])
return
for i in range(queens_num):
cols[row_index] = i
if check_box(row_index):
set_queen(row_index+1)
queens_num=4
res=[]
cols=[0 for _ in range(queens_num)]
set_queen(0)
print(res)
>>>[[1, 3, 0, 2], [2, 0, 3, 1]]
全排列
def permute(nums, m, solution=[]):
if m == 0:
res.append(solution)
return
for i in range(len(nums)):
new_solution = solution + [nums[i]]
new_list = nums[:i] + nums[i+1:]
permute(new_list, m-1, new_solution)
return
res = []
permute([1,2,3,4], 3)
print(res)
>>>[[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]