Uva439——Knight Moves

来源:互联网 发布:js面向对象原型 编辑:程序博客网 时间:2024/06/06 00:23

简单的BFS。只是国际象棋的棋盘有点特殊,坐标需要转换下。

AC代码:

#include <iostream>#include <queue>#include <cstring>using namespace std;struct node{int x, y, count;};int xy[8][2] = {-1, -2, -2, -1, -2, 1, -1, 2, 1, 2, 2, 1, 2, -1, 1, -2};int num[10][10];int ans;int bfs(int x1, int y1, int x2, int y2){int x, y, z;memset(num, 0, sizeof(num));queue<node> Q;node n;n.x = x1;n.y = y1;n.count = 0;num[x1][y1] = 1;Q.push(n);while(!Q.empty()){n = Q.front();Q.pop();x = n.x;y = n.y;z = n.count;if(x == x2 && y == y2)return z;for(int i = 0; i < 8; i++){if(x + xy[i][0] >= 1 && x + xy[i][0] <= 8 && y + xy[i][1] >= 1 && y + xy[i][1] <= 8){if(num[x + xy[i][0]][y + xy[i][1]] == 0){n.x = x + xy[i][0];n.y = y + xy[i][1];n.count = z + 1;num[n.x][n.y] = 1;Q.push(n);}}}}return 0;}int main(){//freopen("1.txt", "r", stdin);char str1[3], str2[3];while(cin >> str1 >> str2){int x1 = str1[0] - 'a' + 1;int y1 = 8 - (str1[1] - '1');int x2 = str2[0] - 'a' + 1;int y2 = 8 - (str2[1] - '1');cout << "To get from " << str1 << " to " << str2 << " takes " << bfs(x1, y1, x2, y2) << " knight moves." << endl;}return 0;}


0 0