您的位置:首页 > 其它

UVa 439,Knight Moves

2014-07-28 17:15 423 查看
BFS模板大水题

虽然是大水题,但是1A过的还是蛮开心的~

感觉需要注意的地方就是下标要ch-'b'(有些人比如我总是习惯性的减a,这题下标是从1开始的,当然你就是从0开始当我没说= =)...减a的会在样例h8过不去的

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#define maxn 100
using namespace std;
int dx[]={1,2,2,1,-1,-2,-2,-1};
int dy[]={-2,-1,1,2,2,1,-1,-2};
int ans;
int p,qq,x,y;
struct Node{
int x,y;
int cnt;
};
int bfs(){
queue<Node> q;
Node u;
u.x=x;u.y=y;u.cnt=0;
q.push(u);
while (!q.empty()){
u=q.front();q.pop();
Node v;
if ((u.x==p)&&(u.y==qq)) {
ans=u.cnt;
return 0;
}
for (int i=0;i<8;i++){
v.x=u.x+dx[i];
v.y=u.y+dy[i];
v.cnt=u.cnt+1;
if (v.x>=1&&v.x<=8&&v.y>=1&&v.y<=8){
q.push(v);
}
}
}
}
int main()
{
char ch1,ch2;
while (cin>>ch1>>x){
y=ch1-'a'+1;
cin>>ch2>>p;
qq=ch2-'a'+1;
bfs();
cout<<"To get from "<<ch1<<x<<" to "<<ch2<<p<<" takes "<<ans<<" knight moves."<<endl;
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: