题目描述
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如今有一个8*8的棋盘,如何将 8 个皇后放在棋盘上,使它们谁也不能被吃掉!这就是著名的八皇后问题。
分析:这个问题在求解时可以使用回溯算法去分析问题——在第一行放上棋子以后,递归到第二行,找到一个能放置棋子的位置,将棋子放上后,递归到第三行。。 。。。 依次类推,但是会找到一行,没有办法放置棋子,也就是说,放置位置上,行、列、斜线都已经有棋子了,那么这时就要返回到上一步,重新放置上一步的棋子,再走下一步,直到下一步能放置棋子便好。整个棋盘放好的标志是第八行已经放置了棋子。
使用回溯算法思考后,思路就很清晰了,虽然这个算法时间复杂度不低,但是它属于那种很好理解的思路,代码如下:
#include<stdio.h>
#include<stdlib.h>
//首先定义几个全局的数组来当作存放皇后的标志位
int cnt=0; //cnt 用来计算解的个数