n皇后问题
问题:
nxn的棋盘上摆n个皇后,要求:任意两个皇后不能冲突,即任意两个皇后不在同一行、同一列或者同一斜线上。
题目剖析
- 棋盘上的每一行都要有一个皇后
- 任意两个皇后不能在同一列、同一行、同一斜线
- 假设是4X4的棋盘,要判定皇后是否能够放在第3行第1列,那么就要判断下图直线所穿过的每个格子时候有皇后
算法思想
- 将第i个皇后摆放在第i行,i从1开始,每个皇后都从第1列开始尝试。
- 判断当前摆放的皇后是否与前面的皇后存在冲突。
- 如果不冲突则摆放,然后继续摆放下一行的皇后
- 如果冲突则考虑下一列,如果该行皇后到第n列都没有合适位置,则回溯到上一个皇后,尝试在原来位置的下一个位置继续尝试摆放皇后。
- 直到i等于n时,就是一组摆放方案。
解决难点问题
- 如何判断是否在同一列
- 如何判断是否在同一列
我们以一个数组queen[i]来记录第i个皇后的位置【举个例子:queen[1]=3就是第1行第3列的皇后】
- 解决问题1就只需要将当前皇后的值去与之前所有皇后的值去比较,如果相等就是存在冲突。
- 解决问题2
代码实现
#include<stdio.h>
#include