19世纪著名的数学家高斯于1895年提出该N皇后的问题,主要是在nxn的国际象棋棋盘上摆放n个皇后棋子,皇后棋子之间不能互相攻击,即其中任意两个皇后都不能处于同一行、同一列或同一斜线上。要给定n然后给出所有的放置方式:
在棋盘上如何放置棋子本身就是一种试探行为,当发现不符合放置规则的时候,就需要撤回所放置的妻子是一个正常操作,因此可以想到利用回溯算法来解决这个问题,由于最终需要输出所有放置方案,所以需要借助一个列表来表示每一行中皇后的位置,将第一行中皇后放置在第1列。
在放置每个皇后时候都需要判断是否会与已经放置的之前的皇后发生冲突,为了方便复用以及解耦,可以先定义一个判断函数,传入当前的坐标位置行数和列数,然后与返回列表中已经确定的皇后来进行逐个对比判断,如果产生冲突则由判断函数来返回false,表示此位置是不可以放置皇后的,而所谓冲突,就是不能同行、同列、同对角线,同行和同列会比较容易判断,对于同对角线如何判断会稍微麻烦一些。
判断同对角线,对于两个坐标(x1,y1)、(