八皇后递归算法问题(递归)求解

八皇后问题的递归求解_Love代码
八皇后问题的递归求解
八皇后问题的递归算法 #include stdio.h #include stdlib.h #define N8/* 棋盘边长 */ #define XXN 15 /* 正(反)对角线个数 */ #define TRUE1 #define FALSE0 int map[N][N];/*棋盘 */ int col[N]; /* 列 */ int XX[XXN]; /*正对角线 */ int YY[XXN]; /*
八皇后问题的递归算法
#include &stdio.h&
#include &stdlib.h&
#define N&8&&&&&&&&/* 棋盘边长& */
#define XXN&&&& 15 /* 正(反)对角线个数 */
#define TRUE&1
#define FALSE&0
int map[N][N];/*&棋盘&&&& */&
int col[N];&& /* 列&&&&&& */
int XX[XXN];& /*&正对角线 */
int YY[XXN];& /* 反对角线 */
int num=0;& /* 解的个数 */ Love代码
显示一个解
void showMap()
{ 本文内容来自
&fprintf(fp,&\n--------------------------\n&);
&for(i=0;i&N;i++){
&&&for(j=0;j&N;j++)
&&&&fprintf(fp,&%-3d&,map[i][j]);
&&&fprintf(fp,&\n&);
} 本文来Love代码
递归求解函数
int& try(int y)
&int success=FALSE;
&if( y==N){&&/* 求出一个解*/
&&showMap();
&&return TRUE;
&for(i=0;i&N;i++){
&&if(XX[N-y+i]==0 && YY[i+y]==0 && col[i]==0)&/* 保证布局要求; 对角线,列,没有重复放置棋子&*/
&&{ 本文来Love代码
&&&XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=1;
&&&if(try(y+1)) success=TRUE;&&&&&&&&&&&&&&/* 放下一个皇后& */&&
&&&XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=0;
&&} 本文内容来自
& 本文内容来自
} Love代码
&int i,j, 本文来Love代码
&fp=fopen(&queen8.txt&,&w+&);
&for(i=0;i&N;i++)
&&for(j=0;j&N;j++)
&&&map[i][j]=0;
&for(i=0;i&XXN;i++) XX[i]=YY[i]=0; 本文来Love代码
&fprintf(fp,&\n start..............&);
&if(!try(0))printf(&\n no resolution!&);
&fprintf(fp,&\n num=%d&,num); Love代码
} 本文内容来自
(责任编辑:admin)
------分隔线----------------------------
首先建立一个MFC对话框程序,工程名为Server,设计好简单的界面如下: 下面开始编写代码,...
我们知道斩魂游戏只要打开了OD调试器或者CE后游戏就会自动关闭,其实我的思路很简单,下...
C/c++趣味程序百例(献给C/C++初学者) 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 ...
// Capture.cpp : implementation file // #include stdafx.h #include DataMan.h #in...
第一种: Button属性页里Style的Bitmap点上 CBitmap B Bitmap.LoadBitmap(IDB_B...
CObject 大多数MFC类的最终基类。支持串行化数据和获得一个类的运行时信息。 CRuntime...C语言递归解决八皇后问题_百度知道2741人阅读
算法(89)
经典的八皇后问题
递归解法直观易懂,但是迭代法需要想点思路
代码如下:
* eightQueen.cpp
Created on:
Author: happier
#include &iostream&
#define N 8
int sum = 0;
int *x = new int[N + 1];
bool place(int k)
for (i = 1; i & i++)
if (x[i] == x[k] || abs(i - k) == abs(x[i] - x[k])) //第一个判断行不能相同,第二个判断对角线不能相同
void backtrack2()//迭代回溯
while(k&0)
x[k]+=1;//当前列加1的位置开始搜索
while((x[k]&=N) && !place(k))//当前列位置是否满足条件
x[k]+=1;//不满足条件,继续搜索下一个位置
if(x[k]&=N)//存在满足条件的列
if(k==N)//是最后一个皇后,完成搜索
for(i=1; i&=N; i++)
cout&&x[i]&&& &;
else//不是,则处理下一个皇后
else//回溯
void backtrack(int t) //递归回溯
int i = 0;
if (t & N) //递归结束返回
for (i = 1; i &= N; i++)
cout && x[i] && & &;
for (i = 1; i &= N; i++)
x[t] = //选择一个皇后
if (place(t)) //判断第t列,第i行放一个皇后是否合法
backtrack(t + 1);
int main()
backtrack(1);
cout && sum &&
backtrack2();
cout && sum &&
这里迭代法没有用栈去模拟,因为理解了其中的含义,可以写出非递归法,但是本质上还是存在回溯的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:412776次
积分:5656
积分:5656
排名:第3225名
原创:166篇
转载:65篇
评论:78条
(1)(1)(1)(2)(1)(5)(16)(21)(12)(1)(6)(11)(3)(3)(2)(4)(4)(10)(6)(2)(2)(1)(4)(10)(1)(2)(1)(4)(2)(1)(2)(7)(3)(14)(19)(13)(7)(11)(7)(8)&&&&经典算法八皇后问题的详解以及回溯(递归)代码示例
&经典算法八皇后问题的详解以及回溯(递归)代码示例
对经典算法八皇后问题的说明,以及代码示例,代码中有详尽的注释,有助于读者充分理解其递归调用的逻辑!
若举报审核通过,可奖励20下载分
被举报人:
zyt5166096
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
课程资源下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
经典算法八皇后问题的详解以及回溯(递归)代码示例
所需积分:1
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
经典算法八皇后问题的详解以及回溯(递归)代码示例
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员

我要回帖

更多关于 八皇后问题 非递归 的文章

 

随机推荐