sicily 1936. Knight Moves

来源:互联网 发布:mindmanager mac破解版 编辑:程序博客网 时间:2024/05/16 11:09
#include <iostream>#include <string>#include <queue>#include <memory.h>using namespace std;struct point{int x;int y;point(int x,int y){this->x = x;this->y = y;}};int next_x[8] = {-2,-1,1,2,2,1,-1,-2};int next_y[8] = {1,2,2,1,-1,-2,-2,-1};int dis[9][9];bool visited[9][9];int start_x,start_y;int end_x,end_y;void bfs(){if(start_x == end_x && start_y == end_y)return;queue<point> q;q.push(point(start_x,start_y));while(!q.empty()){point temp = q.front();q.pop();for(int i = 0;i < 8;i++){int x = temp.x + next_x[i];int y = temp.y + next_y[i];if(!visited[x][y] && x >=1 && y >= 1 && y <= 8 && x <= 8){q.push(point(x,y));visited[x][y] = true;dis[x][y] = dis[temp.x][temp.y] + 1;}}}}int main(){int n;cin >> n;while(n--){string s1,s2;cin >> s1 >> s2;start_x = s1[0] - 'a' + 1;start_y = s1[1] - '0';end_x = s2[0] - 'a' + 1;end_y = s2[1] - '0';memset(visited,false,sizeof(visited));memset(dis,0,sizeof(dis));visited[start_x][start_y] = true;bfs();cout << "To get from " << s1 << " to " << s2 << " takes "<< dis[end_x][end_y] << " knight moves." << endl;}return 0;}

0 0