【 tulaoshi.com - 编程语言 】
                             
                            #include stdio.h
  #define N 5
  void main(){
   int x,y;
   void horse(int i,int j);
   printf("Please input start position:");
   scanf("%d%d",&x,&y);
   horse(x-1,y-1);
  }
  void horse(int i,int j){
   int a[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;
   int jump(int i,int j,int a[N][N]);
   void outplan(int a[N][N]);
   a[i][j]=posnum+1;
   while(posnum=0){
    ti=i;tj=j;
    for(start=save[posnum];start8;++start){
     ti+=h[start];tj+=v[start];
     if(jump(ti,tj,a))
      break;
     ti-=h[start];tj-=v[start];
    }
    if(start8){
     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);
  }
  int jump(int i,int j,int a[N][N]){
   if(iN&&i=0&&jN&&j=0&&a[i][j]==0)
    return 1;
   return 0;
  }
  void outplan(int a[N][N]){
   int i,j;
   for(i=0;iN;i++){
    for(j=0;jN;j++)
     printf("%3d",a[i][j]);
    printf("");
   }
   printf("");
   //getchar();
  }
  用回溯法得到所有的解,但效率较低,只能算出5行5列的。