Python解决n皇后
2021/9/27 22:11:06
本文主要是介绍Python解决n皇后,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
问题: 将n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击,给你一个整数n,返回所有不同的n皇后问题的解决方案
1.1<=n<=9
2.该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位
3.皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行,纵行或斜线上
def gen_board(n, queens): result = [] rows = ["."] * n for i in range(n): rows[queens[i]] = "Q" result.append("".join(rows)) rows[queens[i]] = "." return result def back_track(line_num, n, queens, solutions, columns, diagonal1, diagonal2): if line_num == n: result = gen_board(n, queens) solutions.append(result) return for i in range(n): if i in columns or line_num - i in diagonal1 or line_num + i in diagonal2: continue queens[line_num] = i columns.add(i) diagonal1.add(line_num - i) diagonal2.add(line_num + i) back_track(line_num + 1, n, queens, solutions, columns, diagonal1, diagonal2) columns.remove(i) diagonal1.remove(line_num - i) diagonal2.remove(line_num + i) def solve_n_queens(n): solutions = [] queens = [-1] * n # 判断是否在一列 columns = set() # 左斜线(左斜线上的每个值 横坐标减纵坐标 相等) diagonal1 = set() # 右斜线(右斜线上的每个值 横坐标加纵坐标 相等) diagonal2 = set() back_track(0, n, queens, solutions, columns, diagonal1, diagonal2) return solutions if __name__ == '__main__': a = solve_n_queens(4) print(len(a)) for x in a: print("*" * 20) for y in x: print(y)
这篇关于Python解决n皇后的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型