因为刚学完数组,不知道后面的知识,但是书后的练习题有这样的题目,写了一个程序,感觉又繁琐又难看,而且我也不大会注解,毛病有不少,但自己又找不出来,所以请高手指点我的不足的地方,比如算法,注释,命名等。而且程序运行后无法遍历。所以非常诚恳的请教高手,请不吝指点迷津,小弟万分感谢 
谢谢!
题目:8*8的棋盘上,象棋中的马能否走完64个方格,每个方格只能走一次。 
#include<stdio.h> 
int bestchoice(int a[],int n); 
main() 
{ 
 int board[8][8]={1,0},           //棋盘,从board[0][0]开始走 
  moveRow[8]={2,1,-1,-2,-2,-1,1,2},   //存放横向坐标 
  moveColumn[8]={-1,-2,-2,-1,1,2,2,1},  // 存放纵向坐标  
  visitLevel[8][8]={2,3,4,4,4,4,3,2,3,4,6,6,6,6,4,3,      //访问等级,对应棋盘坐标 
  4,6,8,8,8,8,6,4,4,6,8,8,8,8,6,4,4,6,8,8,8,8,6,4,4,6,8, 
  8,8,8,6,4,3,4,6,6,6,6,4,3,2,3,4,4,4,4,3,2}, 
  a[8];              //存放访问等级的数据 
 int row,column,row1,column1,condition,count; 
 int moveNumber;  //走法 取值0--7,共8种 
 row=0; 
 row1=0;          //纪录row上次的值 
 column=0; 
 column1=0;        //纪录column上次的值 
 condition=1;  
 while(condition>0)                       //condition判断马是否能继续走动,等于0意味着走不动 
 {   
  for(count=0;count<8;count++)      //初始化a[8],令其元素都等于零,以便存入数据 
        a[count]=0; 
  condition=0;       //初始化,控制循环 
       
  for(moveNumber=0;moveNumber<8;moveNumber++)   //将各种"走法"的访问等级存入a[8] 
  { 
   row+=moveRow[moveNumber]; 
   column+=moveColumn[moveNumber]; 
   if(row>=0&&row<=7&&column>=0&&column<=7&&board[row][column]==0)  //判断走法是否越界 
   { 
    condition++; 
    a[moveNumber]=visitLevel[row][column]; 
   } 
   row=row1; 
      column=column1; 
  }   //结束for循环 
  if(condition>0){ 
   moveNumber=bestchoice(a,8);           //选择最佳的走法 
   row+=moveRow[ moveNumber ];           
   column+=moveColumn[ moveNumber ];          //移动 
   row1=row; 
   column1=column; 
   board[row][column]=1;       //能到达的方格标记为1 
  } 
 } 
 printf("\n1代表可以到达,0代表不能到达:\n"); 
 int i,j; 
 for(i=0;i<8;i++) { 
  for(j=0;j<8;j++) 
   printf("%3d",board[i][j]); 
  printf("\n"); 
 } 
 return 0; 
} 
int bestchoice(int a[],int n)  //选择最小的访问等级,返回下标,即为moveNumber 
{ 
 int min=9; 
 int i; 
 for(i=0;i<n;i++) 
 { 
  if(a[i]!=0&&a[i]<min) 
   min=a[i]; 
 } 
 for(i=0;i<n;i++) 
 { 
  if(min==a[i]) 
   return i; 
 } 
} 
 

 
											





 
	     
											




