N皇后Python代码仅n=1/5有效,其余无输出问题求助
N皇后问题代码运行异常分析
我编写了两款解决N皇后问题的Python代码,分别采用numpy数组和列表实现。测试0到20的整数后发现:
- numpy数组版本仅当n=1或5时能输出正确结果,其余n值均输出“No Solution”
- 列表实现版本仅支持n=1,n=5也无法输出结果
numpy数组实现代码
import numpy as np def isSafe(arr, row, col, n): for ind in range(row): if(arr[ind][col] == 1): return False x = row y = col while x >= 0 and y >= 0: if arr[x][y] == 1: return False x -= 1 y -= 1 x = row y = col while x >= 0 and y < n: if arr[x][y] == 1: return False x -= 1 y += 1 return True def nQueen(arr, row, n): if row >= n: return True for col in range(n): if isSafe(arr,row,col,n) == True: arr[row][col] = 1 if nQueen(arr, row+1, n) == True: return True return False def main(): n = int(input("Enter the size of board: ")) arr = np.zeros((n,n)).astype(int) if nQueen(arr, 0, n): for x in range(n): for y in range(n): print(arr[x][y], end='\t') print("\n") else: print("No Solution: ") if __name__ == '__main__': main()
列表实现代码
import numpy as np def isSafe(arr, row, col, n): for ind in range(row): if(arr[ind][col] == 1): return False x = row y = col while x >= 0 and y >= 0: if arr[x][y] == 1: return False x -= 1 y -= 1 x = row y = col while x >= 0 and y < n: if arr[x][y] == 1: return False x -= 1 y += 1 return True def nQueen(arr, row, n): if row >= n: return True for col in range(n): if isSafe(arr,row,col,n) == True: arr[row][col] = 1 if nQueen(arr, row+1, n) == True: return True return False def main(): n = int(input("Enter the size of board: ")) arr = [[0]*n]*n if nQueen(arr, 0, n): for x in range(n): for y in range(n): print(arr[x][y], end='\t') print("\n") else: print("No Solution: ") if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者CodingHatesU
相关产品推荐
相关产品推荐

