马的遍历问题
用贪心算法写了个马的遍历的程序,我试了很多种情况,只有起始点在 3,3时出错误,谁能给改下么代码:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct
{
int x,y,waysout;
}hnode;
int h[8][8];
int dx[8]= { 2, 1, -1, -2, -2, -1, 1, 2 };
int dy[8]= { 1, 2, 2, 1, -1, -2, -2, -1 };
int ways(int x,int y)
{
int i,count=0,tx,ty;
if(x<0||y<0||x>7||y>7||h[x][y]!=0)
return(-1);
for(i=0;i<8;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if(tx<0||ty<0||tx>7||ty>7)
continue;
if(h[tx][ty]==0)
count++;
}
return(count);
}
void sortnode(hnode hn[8],int n)
{
int i,j,min,k;
hnode temp;
for(i=0;i<n;++i)
{
min=hn[i].waysout;
k=i;
for(j=i+1;j<n;++j)
if(hn[j].waysout<min)
{
min=hn[j].waysout;
k=j;
}
if(k!=i)
{
{ temp.x=hn[i].x;
temp.y=hn[i].y;
temp.waysout=hn[i].waysout;
}
{ hn[i].x=hn[k].x;
hn[i].y=hn[k].y;
hn[i].waysout=hn[k].waysout;
}
{ hn[k].x=temp.x;
hn[k].y=temp.y;
hn[k].waysout=temp.waysout;
}
}
}
}
int dfs(int x,int y,int count)
{
int i,j,tx,ty;
hnode hn[8];
if(count>8*8)
{
return;
}
else
{
for(i=0;i<8;++i)
{
hn[i].x=tx=x+dx[i];
hn[i].y=ty=y+dy[i];
hn[i].waysout=ways(tx,ty);
}
sortnode(hn,8);
for(i=0;hn[i].waysout<0;++i){};
tx=hn[i].x;
ty=hn[i].y;
h[tx][ty]=count;
dfs(tx,ty,count+1);
}
}
void main()
{
int x,y,i,j;
printf("please input x and y:");
scanf("%d,%d",&x,&y);
while(x<0||y<0||x>7||y>7)
{
printf("please reput x and y again:");
scanf("%d,%d",&x,&y);
}
for(i=0;i<8;i++)
for(j=0;j<8;j++)
h[i][j]=0;
h[x][y]=1;
dfs(x,y,2);
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
printf("%d ",h[i][j]);
printf("\n");
}
getch();
}
另外谁能用C语言演示下马走64个格子的过程,我对画图这方面不太懂,谢谢了!
[[it] 本帖最后由 buxx8020882 于 2009-7-24 16:28 编辑 [/it]]