您的位置:首页 > 其它

hdu 1372 Knight Moves

2013-07-04 16:13 253 查看
链接:点击打开链接

给你8*8的棋盘,给你起点和终点,用马走日,最少几步可以从起点走到终点。简单BFS。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int sx,sy,ex,ey;
char a[5],b[5];
int c[8][2]={-1,2,-2,1,-2,-1,-1,-2,1,-2,2,-1,2,1,1,2},vis[10][10];
struct ss{
int x,y,count;
};
void bfs(){
int i;
ss p,s;
queue<ss>Q;
p.x=sx;
p.y=sy;
p.count=0;
Q.push(p);
vis[sx][sy]=1;
while(!Q.empty()){
p=Q.front();
Q.pop();
for(i=0;i<8;i++){
s=p;
s.x+=c[i][0];
s.y+=c[i][1];
if(s.x>=1&&s.x<=8&&s.y>=1&&s.y<=8&&!vis[s.x][s.y]){
s.count++;
if(s.x==ex&&s.y==ey){
printf("To get from %s to %s takes %d knight moves.\n",a,b,s.count);
return;
}
vis[s.x][s.y]=1;
Q.push(s);
}
}
}
printf("To get from %s to %s takes 0 knight moves.\n",a,b);
}
int main(){
while(~scanf("%s %s",a,b)){
sx=a[0]-'a'+1;
sy=a[1]-'0';
ex=b[0]-'a'+1;
ey=b[1]-'0';
memset(vis,0,sizeof(vis));
bfs();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: