题目地址:点击打开链接
跟象棋中马一样的走法,BFS遍历
C++代码:
#include <iostream> #include <string> #include <cstring> #include <deque> #include <utility> using namespace std; const int maxsize = 10; int visited[maxsize][maxsize]; int num[maxsize][maxsize]; int d[8][2]={-1,2,-1,-2,1,2,1,-2,2,-1,2,1,-2,-1,-2,1}; int main() { string a,b; while(cin>>a>>b) { int start_x=a[0]-‘a‘; int start_y=a[1]-‘1‘; int end_x=b[0]-‘a‘; int end_y=b[1]-‘1‘; memset(visited,0,sizeof(visited)); memset(num,0,sizeof(num)); visited[start_x][start_y]=1; deque<pair<int,int> > dp; dp.push_back(make_pair(start_x,start_y)); while(!dp.empty()&&(dp.front().first!=end_x||dp.front().second!=end_y)) { int a=dp.front().first; int b=dp.front().second; dp.pop_front(); for(int i=0;i<8;++i) { int x=a+d[i][0]; int y=b+d[i][1]; if(x>=0&&x<8&&y>=0&&y<8&&!visited[x][y]) { visited[x][y]=1; num[x][y]=num[a][b]+1; dp.push_back(make_pair(x,y)); } } } cout<<"To get from "<<a<<" to "<<b<<" takes "<<num[end_x][end_y]<<" knight moves."<<endl; } return 0; }
UVa439 - Knight Moves,布布扣,bubuko.com
原文:http://blog.csdn.net/leizh007/article/details/21649377