/*************************
*八皇后问题:递归解决/C语言
*按照8层8叉树来想象,共有8^8种可能,对应每个叶子节点;
*由根到叶子,自左至右遍历每种情况;
*剪枝掉不可行的方案;
*及时输出可行方案,继续遍历;
*其间并未对每种可行方案累计存储;
*所有调用的递归完成返回后,程序结束。
********************
*Author: Joy/王晓雪
*Date: 04/11/2015 19:51 Sat.
**************************/
#include <stdio.h>
#include <string.h>
#define N 8
int column[N+1]; //标记每列是否有QUEEN,有为1,无为0.
int right_up[N*2]; //从右上到左下方向的对角线/,(i,j)在第(i+j-1)列.
int left_up[N*2]; //从左上到右下方向的对角线\,(i,j)在第(N-j+i)列.
int queen[N+1]; //记录每行queen所在的列号.
int cnt; //表示第cnt个解决方案.
void init(); //初始化数组及变量
void backtract( int i ); //回朔递归求解,i定位第i行的queen.
void showAnswer(); //打印输出当前存储的解决方案
int main()
{
init();
backtract( 1 );
return 0;
}
void init()
{
cnt=0;
//标记N个queen在棋盘上的位置
memset( column, 0, sizeof(column) ); //初始化为0,表示空闲;
memset( right_up, 0, sizeof(right_up
八皇后问题:递归解决/C语言(基础方法)
最新推荐文章于 2021-05-19 11:20:54 发布