马踏棋盘(贪婪法)

#include "stdio.h"
int delta_i[]={2,1,-1,-2,-2,-1,1,2};
int delta_j[]={1,2,2,1,-1,-2,-2,-1};
int board[8][8];
int exitn(int i,int j,int s,int a[])
{
 int i1,j1,k,count;
 for(count=k=0;k<8;k++)
 {
  i1=i+delta_i[(s+k)%8];
  j1=j+delta_j[(s+k)%8];
  if(i1>=0&&i1<8&&j1>=0&&j1<8&&board[i1][j1]==0)
   a[count++]=(s+k)%8;
 }
 return count;
}

int next(int i,int j,int s)
{
 int m,k,kk,min,a[8],b[8],temp;
 m=exitn(i,j,s,a);
 if(m==0) return -1;
 for(min=9,k=0;k<m;k++)
 {
  temp=exitn(i+delta_i[a[k]],j+delta_j[a[k]],s,b);
  if(temp<min)
  {
   min=temp;
   kk=a[k];
  }
  
 }
 return kk;
}

void print_borad()
{
 int i,j;
  for(i=0;i<8;i++)
   {
    for(j=0;j<8;j++)
     printf("%4d",board[i][j]);
    printf("/n/n");
   }
  printf("/n/n/n/n/n/n/n/n/n/n/n/n");
  getchar();

}

void main()
{
 int sx,sy,i,j,step,no,start;
 for(sx=0;sx<8;sx++)
  for(sy=0;sy<8;sy++)
  {
   start=0;
   do{
    for(i=0;i<8;i++)
     for(j=0;j<8;j++)
      board[i][j]=0;

     board[sx][sy]=1;
     i=sx;j=sy;

     for(step=2;step<=64;step++)
     {
      if((no=next(i,j,start))==-1) break;
      
      i+=delta_i[no];
      j+=delta_j[no];
      
      board[i][j]=step;
     
    print_borad();
     }
     if(step>64) break;
     
     start++;
     
   }while(step<=64);
   
  print_borad();
   
  }
}

阅读更多
文章标签: include
个人分类: c程序
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭