急求数据结构(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();

}

展开全文

热门推荐

相关攻略

猜你喜欢