| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
第一道BFS纪念//============================================================================
// Name : PKU-ACM.cpp
// Author : jarvis
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C, Ansi-style
//============================================================================
#include <iostream>
#include <string>
#include <map>
#include <deque>
#include <queue>
#include <iomanip>
#include <algorithm>
#include <numeric>
#include <functional>
#include <cstdio>
#include <cstring>
using namespace std;
#define repeat(i,beg,end) for(int i=beg;i<end;++i)
struct node{
int x,y,sum;
node(int x=0,int y=0,int s=0):x(x),y(y),sum(s){}
};
bool flag[10][10];
int dx[]={1,-1, 2,-2, 1, -1,2 ,-2};
int dy[]={2, 2, 1, 1,-2, -2,-1,-1};
char s[4],t[4];
bool over(int x)
{
return x>7||x<0;
}
int bfs(node a,node b)
{
queue<node> q;
memset(flag,0,sizeof(flag));
q.push(a);
flag[a.x][a.y]=true;
while(!q.empty())
{
int x=q.front().x;
int y=q.front().y;
if(x==b.x&&y==b.y)
return q.front().sum;
for(int i=0;i<8;++i)
{
if(!over(x+dx[i])&&!over(y+dy[i])&&!flag[x+dx[i]][y+dy[i]])
{
q.push(node(x+dx[i],y+dy[i],q.front().sum+1));
}
}
q.pop();
}
return -1;
}
int main()
{
while(cin>>s>>t)
{
int ans=bfs(node(s[0]-'a',s[1]-'1'),node(t[0]-'a',t[1]-'1'));
cout<<"To get from "<<s<<" to "<<t<<" takes "<<ans<<" knight moves."<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator