这是用贪婪法编的马的遍历。
p()用来选择出口,g()考察下个出口的出口数。
#include<stdio.h>
#include<conio.h>
int m[8][8]=,a[8]=,
b[8]=;
int k=0;
int g(int x,int y)
{int x1,y1,com=0,i=0;
if(x<0x>7y<0y>7m[x][y]>0)
return(8);
else for(;i<7;i++)
{x1=x+a[i];y1=y+b[i];
if(x1>=0&&x1<8&&y1>=0&&y1<8&&m[x1][y1]==0)
com++;}
return(com);
}
p(int x,int y)
{int i,n,k,j=8;
for(i=0;i<8;i++)
{n=g(x+a[i],y+b[i]) ;
if(n<j)
{ k=i;j=n;}
}
return(k);
}
f(int x,int y)
{int i;
if(k==64)
printf("OK ");
else{
i=p(x,y);
m[x][y]=++k;
x=x+a[i];y=y+b[i];
f(x,y); }
}
main()
{ int x,y;
f(0,0);
printf(" ");
for(x=0;x<8;x++)
{for(y=0;y<8;y++)
printf("%3d",m[x][y]);
printf(" ");}
getch();
}