主题:关于国际象棋跳马问题(递归),前辈请进
#define BORDER 8
#define MAX 64
#include<iostream>
using namespace std;
int a[MAX]={0};
int b[MAX]={0};
int array[BORDER][BORDER]={0};
int main()
{
int MoveHorse(int x,int y,int step);
MoveHorse(0,0,0);
return 0;
}
int MoveHorse(int x,int y,int step)
{
array[x][y]=1;
a[step]=x;
b[step]=y;
if(step>=63) //递归到63步直接打出来
{
for(int i=0;i<MAX-1;i++)
cout<<a[i]<<","<<b[i]<<endl;
/*for(int z=0;z<MAX;z++)
{
system("cls");
int temp1=a[z];
int temp2=b[z];
array[temp1][temp2]=' ';
for(int i;i<BORDER;i++)
{
for(int j;j<BORDER;j++)
cout<<array[i][j];
cout<<endl;
}
}*/
system("PAUSE");
}
int i,j;
//试探递归
if(((i=x-2)>=0)&&((i=x-2)<BORDER)&&((j=y-1)>=0)&&((j=y-1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-2,y-1,step+1)) return 1;}
if(((i=x-2)>=0)&&((i=x-2)<BORDER)&&((j=y+1)>=0)&&((j=y+1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-2,y+1,step+1)) return 1;}
if(((i=x-1)>=0)&&((i=x-1)<BORDER)&&((j=y+2)>=0)&&((j=y+2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-1,y+2,step+1)) return 1;}
if(((i=x+1)>=0)&&((i=x+1)<BORDER)&&((j=y+2)>=0)&&((j=y+2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+1,y+2,step+1)) return 1;}
if(((i=x+2)>=0)&&((i=x+2)<BORDER)&&((j=y+1)>=0)&&((j=y+1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+2,y+1,step+1)) return 1;}
if(((i=x+2)>=0)&&((i=x+2)<BORDER)&&((j=y-1)>=0)&&((j=y-1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+2,y-1,step+1)) return 1;}
if(((i=x+1)>=0)&&((i=x+1)<BORDER)&&((j=y-2)>=0)&&((j=y-2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+1,y-2,step+1)) return 1;}
if(((i=x-1)>=0)&&((i=x-1)<BORDER)&&((j=y-2)>=0)&&((j=y-2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-1,y-2,step+1)) return 1;}
array[x][y]=0;
a[step]=0;
b[step]=0;
return 0;
}
为什么此程序出不来结果~一直在算住
当我把跳的步数改成if(step>=62)时,程序过了半分钟就出来结果了~但少跳一步~
我就不明白63步和62步只相差一步,执行时间差那么大~
是不是我的程序的逻辑上出错~望高手校正~
#define MAX 64
#include<iostream>
using namespace std;
int a[MAX]={0};
int b[MAX]={0};
int array[BORDER][BORDER]={0};
int main()
{
int MoveHorse(int x,int y,int step);
MoveHorse(0,0,0);
return 0;
}
int MoveHorse(int x,int y,int step)
{
array[x][y]=1;
a[step]=x;
b[step]=y;
if(step>=63) //递归到63步直接打出来
{
for(int i=0;i<MAX-1;i++)
cout<<a[i]<<","<<b[i]<<endl;
/*for(int z=0;z<MAX;z++)
{
system("cls");
int temp1=a[z];
int temp2=b[z];
array[temp1][temp2]=' ';
for(int i;i<BORDER;i++)
{
for(int j;j<BORDER;j++)
cout<<array[i][j];
cout<<endl;
}
}*/
system("PAUSE");
}
int i,j;
//试探递归
if(((i=x-2)>=0)&&((i=x-2)<BORDER)&&((j=y-1)>=0)&&((j=y-1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-2,y-1,step+1)) return 1;}
if(((i=x-2)>=0)&&((i=x-2)<BORDER)&&((j=y+1)>=0)&&((j=y+1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-2,y+1,step+1)) return 1;}
if(((i=x-1)>=0)&&((i=x-1)<BORDER)&&((j=y+2)>=0)&&((j=y+2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-1,y+2,step+1)) return 1;}
if(((i=x+1)>=0)&&((i=x+1)<BORDER)&&((j=y+2)>=0)&&((j=y+2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+1,y+2,step+1)) return 1;}
if(((i=x+2)>=0)&&((i=x+2)<BORDER)&&((j=y+1)>=0)&&((j=y+1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+2,y+1,step+1)) return 1;}
if(((i=x+2)>=0)&&((i=x+2)<BORDER)&&((j=y-1)>=0)&&((j=y-1)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+2,y-1,step+1)) return 1;}
if(((i=x+1)>=0)&&((i=x+1)<BORDER)&&((j=y-2)>=0)&&((j=y-2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x+1,y-2,step+1)) return 1;}
if(((i=x-1)>=0)&&((i=x-1)<BORDER)&&((j=y-2)>=0)&&((j=y-2)<BORDER)&&(!array[i][j]))
{ if(MoveHorse(x-1,y-2,step+1)) return 1;}
array[x][y]=0;
a[step]=0;
b[step]=0;
return 0;
}
为什么此程序出不来结果~一直在算住
当我把跳的步数改成if(step>=62)时,程序过了半分钟就出来结果了~但少跳一步~
我就不明白63步和62步只相差一步,执行时间差那么大~
是不是我的程序的逻辑上出错~望高手校正~