关于递归的跳马问题。
题目如下:在5*5格的棋盘上,有一个中国象棋的马,它可以朝8个方向跳,但不允许出界或跳到已跳过的格子上,要求不重复的跳过所有位置。(最后不要求回到起点)
这是我写的代码,但有问题,在第一次递归时就提示错误:unhandled exception in cpp1.exe 0xC0000FD:Stack Overflow.
请问下是怎么回事?
这是我写的代码,但有问题,在第一次递归时就提示错误:unhandled exception in cpp1.exe 0xC0000FD:Stack Overflow.
#include<iostream>
using namespace std;
#define size 5
int num=0; //用来统计一共有多少种;
void put(bool chess[size][size],int x,int y);
bool finish(bool chess[size][size]);
//bool chess[size][size] true表示已经走过了,false表示没有走过。
int main()
{ bool chess[size][size];
//初始化表格;
int i,j;
for (i = 0 ; i < size ; i++)
for (j = 0 ; j< size ; j++)
chess[i][j]=false;
//放置;
put(chess,0,0);
cout << num;
system("pause");
}
void put(bool chess[size][size],int x,int y)
{ int i,j;
chess[x][y]=true;
if ( !finish(chess) ) //没有结束;
for (i = 0 ; i < size ; i++)
for (j = 0 ; j< size ; j++)
{ if ( (x-i)*(x-i) + (y-j)*(y-j) == 5 ) //满足两点距离的平方为5,所以可以走;
put(chess,i,j);
}
else
num++;
}
bool finish(bool chess[size][size])
{ int i,j;
for (i = 0 ; i < size ; i++)
for (j = 0 ; j< size ; j++)
if ( chess[i][j] != true ) return false;
return true;
}
请问下是怎么回事?
...全文
相关推荐
跳马智力Java源码
本程序是一个小小的智力程序,真正的遍历稍稍改改就可以。rar包中有原题目和我的解
pascal 跳马问题
pascal 跳马问题:在5*5格的棋盘上,从1点出发,按日字跳马,要求不重复地跳经所有方格.求出符合要求的所有跳马方案,输出前5个方案及总方案数.
骑士周游列国(跳马问题)C++代码实现
C++ 骑士周游列国(跳马问题) 内附报告详解设计过程
HORSE_PROBLEM.rar_Horse
使用回溯的方法实现跳马问题,同时,还使用了递归的思想。跳马问题描述:在N*N格的棋盘上,从(1,1)点出发,按日字跳马,要求不重复地跳经所有方格。求出符合要求的所有跳马方案
回溯问题代码
关于回溯问题的一些代码,包括8皇后问题、括号问题、零钱问题和象棋跳马全棋盘。


