标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7261 Accepted Submission(s): 4353
Source Code:
#include <iostream> #include <string> #include <queue> #include <map> using namespace std; struct Location{ int x; int y; int count; }; int go[][2]={ {1,2}, {2,1}, {2,-1}, {1,-2}, {-1,-2}, {-2,-1}, {-2,1}, {-1,2} }; map<char,int> Dictionary; Location start,end; queue<Location> Q; void initDictionary(){ Dictionary.insert(make_pair(‘a‘,1)); Dictionary.insert(make_pair(‘b‘,2)); Dictionary.insert(make_pair(‘c‘,3)); Dictionary.insert(make_pair(‘d‘,4)); Dictionary.insert(make_pair(‘e‘,5)); Dictionary.insert(make_pair(‘f‘,6)); Dictionary.insert(make_pair(‘g‘,7)); Dictionary.insert(make_pair(‘h‘,8)); } int BFS(int end_x,int end_y){ while(Q.empty()==false){ int now_x=Q.front().x; int now_y=Q.front().y; int now_count=Q.front().count+1; if(now_x==end_x&&now_y==end_y) return 0; Q.pop(); for(int i=0;i<8;++i){ int new_x=now_x+go[i][0]; int new_y=now_y+go[i][1]; if(new_x<1||new_x>8||new_y<1||new_y>8) continue; if(new_x==end_x&&new_y==end_y){ return now_count; } Location tmp; tmp.x=new_x; tmp.y=new_y; tmp.count=now_count; Q.push(tmp); } } } int main(){ string str_a,str_b; initDictionary(); while(cin>>str_a>>str_b){ start.x=(int)(str_a[1]-‘0‘); start.y=Dictionary[str_a[0]]; start.count=0; end.x=(int)(str_b[1]-‘0‘); end.y=Dictionary[str_b[0]]; while(Q.empty()==false) Q.pop(); Location tmp; tmp.x=start.x; tmp.y=start.y; tmp.count=0; Q.push(tmp); int answer=BFS(end.x,end.y); cout<<"To get from "<<str_a<<" to "<<str_b<< " takes "<<answer<<" knight moves."<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/Murcielago/p/4245041.html