深崎暮人小画集:关于马的遍历

来源:百度文库 编辑:神马品牌网 时间:2024/04/27 23:14:05
#include<stdio.h>
#define MAX 8

int a[MAX][MAX];
int b[MAX*MAX],c[MAX*MAX];
int scheme;

void out(void)
{
int i,j;

for(i=0;i<MAX;++i){
for(j=0;j<MAX;++j)
printf("(%d,%d)\t",c[i*MAX+j],b[i*MAX+j]);
printf("\n");
}
++scheme;
printf("\n");
}

int horse(int x,int y,int step)/*jump to next step*/
{
int i,j;

a[x][y]=1;
b[step]=x;
c[step]=y;
if(step>=MAX*MAX-1)out();
if((i=x+1)<MAX&&(j=y+2)<MAX&&!a[i][j])
if(horse(i,j,step+1)) return 1;
if((i=x+2)<MAX&&(j=y+1)<MAX&&!a[i][j])
if(horse(i,j,step+1)) return 1;
if((i=x+2)<MAX&&(j=y-1)>=0&&!a[i][j])
if(horse(i,j,step+1)) return 1;
if((i=x+1)<MAX&&(j=y-2)>=0&&!a[i][j])
if(horse(i,j,step+1)) return 1;
if((i=x-1)>=0&&(j=y-2)>=0&&!a[i][j])
if(horse(i,j,step+1)) return 1;
if((i=x-2)>=0&&(j=y-1)>=0&&!a[i][j])
if(horse(i,j,step+1)) return 1;
if((i=x-2)>=0&&(j=y+1)<MAX&&!a[i][j])
if(horse(i,j,step+1)) return 1;
if((i=x-1)>=0&&(j=y+2)<MAX&&!a[i][j])
if(horse(i,j,step+1)) return 1;
a[x][y]=0;
b[step]=c[step]=-1;
return 0;
}
main()
{
int i;

for(i=0;i<MAX*MAX;++i)
b[i]=c[i]=-1;
horse(0,0,0);
printf("There are %d schemes\n",scheme);
}

这是曹化工编的C语言辅导书的一种解答。
那个return 1 以及return 0 是不是可以去掉。
而且if(hosrse(x,y,step))后面的return 1 好像永远也执行不到。
我试了一下,不带返回值,也能输出正确解答。
问为什么要带返回值。