HDU-1372-Knight Moves
http://acm.hdu.edu.cn/showproblem.php?pid=1372
求“马”从一点到另一点的最短距离,马走日,BFS即可
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int dir[8][2]={{-2,1},{-2,-1},{2,-1},{2,1},{-1,2},{-1,-2},{1,2},{1,-2}};
int ans[10][10];
int visit[10][10];
struct cam
{
int x;
int y;
}list[100];
int go(int x,int y)
{
if(1<=x&&x<=8&&0<=y&&y<8)
return 1;
return 0;
}
int bfs(int x1,int y1,int x2,int y2)
{
int i,head,tail;
int xx,yy;
memset(visit,0,sizeof(visit));
memset(ans,0,sizeof(ans));
ans[x1][y1]=0;
visit[x1][y1]=1;
head=0;
tail=1;
list[0].x=x1;
list[0].y=y1;
while(head<tail)
{
x1=list[head].x;
y1=list[head].y;
if(x1==x2&&y1==y2)
return ans[x2][y2];
for(i=0;i<8;i++)
{
xx=x1+dir[i][0];
yy=y1+dir[i][1];
if(go(xx,yy)&&!visit[xx][yy])
{
visit[xx][yy]=1;
ans[xx][yy]=ans[x1][y1]+1;
list[tail].x=xx;
list[tail].y=yy;
tail++;
}
}
head++;
}
return -1;
}
int main()
{
int x1,y1,x2,y2,sol;
char s1[3],s2[3];
while(scanf("%s %s",s1,s2)!=EOF)
{
y1=s1[0]-'a';
x1=s1[1]-'0';
y2=s2[0]-'a';
x2=s2[1]-'0';
sol=bfs(x1,y1,x2,y2);
printf("To get from %s to %s takes %d knight moves.\n",s1,s2,sol);
}
return 0;
}
分享到:
相关推荐
hdu-acm源代码(上百题)hdu-acm源代码、hdu-acm源代码hdu-acm源代码
算法-数塔(HDU-2084).rar
算术(HDU-6715).rar
算法-确定比赛名次(HDU-1285).rar
最短路(HDU-2544).rar
算法-连连看(HDU-1175)(包含源程序).rar
算法-命运(HDU-2571)(包含源程序).rar
算法-欧拉回路(HDU-1878)(包含源程序).rar
算法-迷宫城堡(HDU-1269)(包含源程序).rar
算法-免费馅饼(HDU-1176)(包含源程序).rar
算法-排列2(HDU-1716)(包含源程序).rar
算法-六度分离(HDU-1869)(包含源程序).rar