递归和回溯有什么区别

C_lea 2016-03-27 05:47:57
就是一个八皇后的问题,用递归来实现回溯的吗?
下面贴代码,同时有几个疑问
#include<iostream>
using namespace std;
int N=8;
int layout[8];
int cs=0;
int isSafa(int row, int col)
{
int i;
for(i=0;i<row;i++)
{
if(layout[i]==col)
return 0;
if(i-layout[i]==row-col)
return 0;
if(i+layout[i]==row+col)
return 0;
}
return 1;
}
void lay(int row)
{
int col;
if (row==N)//这儿,当条件成立时候,结束函数,那下一步是什么?跳到哪儿?
{
printf("第%2d个答案:", cs+1);
cs++;
for(row=0;row<N;row++)
printf("%d,%d ",row+1,layout[row]+1);
printf("\n");
}
else
{
for(col=0;col<N;col++)
{
layout[row]=col;
if(isSafa(row,col))
lay(row+1); //这儿是判断条件的,但当执行到最后一列还是没条件的时候(就是下一行没有能插入的皇后),他是怎么进行回溯的,我单步调试的时候他为啥是自动跳到上一行了。。。
}
}
}
void main()
{
lay(0);
}
...全文
364 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
C_lea 2016-03-27
  • 打赏
  • 举报
回复
没人回答新人吗?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧