递归和回溯有什么区别
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);
}