数据结构—马踏棋盘
想请教一下数据结构——马踏棋盘的算法,小女子虽然参考了很多资料但是还是不明白,头都大了,现在满脑子糨糊。请问有人可以为我粗略的解释一下么?不胜感激!!谢谢!
[解决办法]
- C/C++ code
#include <stdio.h> main() { int a[9][9],object[9][9],step[9][3]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2}, {5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}}; int i,j,k,x,y,z,m,n,min; for(i=1;i<=8;i++) for(j=1;j<=8;j++) a[i][j]=0; /* clear data in array */ for(i=1;i<=8;i++) for(j=1;j<=8;j++) for(k=1;k<=8;k++) { x=i;y=j; x=x+step[k][1]; y=y+step[k][2]; if(x>=1&&x<=8&&y>=1&&y<=8) a[i][j]++ ; /* initilize array */ } /* start col and row;*/ printf("Please inpute start position x,y\n"); scanf("%d,%d",&m,&n); for(z=1;z<=64;z++) { min =10; object[m][n]=z; a[m][n]=0; for(k=1;k<=8;k++) { x=m+step[k][1]; y=n+step[k][2]; if(x>=1&&x<=8&&y>=1&&y<=8) if(a[x][y]!=0) { --a[x][y]; if(a[x][y]<min) { min=a[x][y]; i=x; j=y; } } } m=i;n=j; } for(i=1;i<=8;i++) { for(j=1;j<=8;j++) printf("%6d",object[i][j]); printf("\n"); } }