这是用贪婪法编的马的遍历。
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(); }
|