八皇后问题:递归解决/C语言(基础方法)

/*************************
*八皇后问题:递归解决/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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值