八皇后问题问题是一个古老而著洺的问题是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线(对角线)上问有多少种摆法。
下面的C代码可以解决N皇后问题8皇后问题的解是92。
show(); /* 如果全部摆好则输出所有皇后的坐标 */程序运行部分结果截图:
由于8个皇后的任意两个不能处在同一行,那么肯定是每一个皇后占据一行於是我们可以定义一个数组ColumnIndex[8],数组中第i个数字表示位于第i行的皇后的列号先把数组ColumnIndex的8个数字分别用0~7初始化,接下来就是对数组ColumnIndex做全排列因为我们是用不同的数字初始化数组,所以任意两个皇后肯定不同列我们只需要判断每一个排列对应的8个皇后是不是在同一对角线上,也就是对于数组的两个下标i和j是不是
//判断是否是合法的序列 //获得皇后问题的全排列 //可以解决N皇后问题
结果输出为:92。对于合法排列鈳以输出皇后放置的详细位置。