急求数据结构(C语言版)马踏棋盘问题解决方案
2024-07-19 00:19:44作者:饭克斯
#include
#include
#defineN5
voidmain(){
intx,y;
voidhorse(inti,intj);
printf(Pleaseinputstartposition:);
scanf(%d%d,&x,&y);
horse(x-1,y-1);
}
voidhorse(inti,intj){
inta[N][N]={0},start=0,
h[]={1,2,2,1,-1,-2,-2,-1},
v[]={2,1,-1,-2,2,1,-1,-2},
save[N*N]={0},posnum=0,ti,tj,count=0;
intjump(inti,intj,inta[N][N]);
voidoutplan(inta[N][N]);
a[i][j]=posnum+1;
while(posnum>=0){
ti=i;tj=j;
for(start=save[posnum];start<8;++start){
ti+=h[start];tj+=v[start];
if(jump(ti,tj,a))
break;
ti-=h[start];tj-=v[start];
}
if(start<8){
save[posnum]=start;
a[ti][tj]=++posnum+1;
i=ti;j=tj;save[posnum]=0;
if(posnum==N*N-1){
//outplan(a);
count++;
}
}
else{
a[i][j]=0;
posnum--;
i-=h[save[posnum]];j-=v[save[posnum]];
save[posnum]++;
}
}
printf(%5d,count);
}
intjump(inti,intj,inta[N][N]){
if(i=0&&j=0&&a[i][j]==0)
return1;
return0;
}
voidoutplan(inta[N][N]){
inti,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf(%3d,a[i][j]);
printf(\n);
}
printf(\n);
getchar();
}