标签:跳马
#include <iostream> #include <queue> using namespace std; typedef struct{ int row; int col; }Node; int n; int sx,sy;//start node int ex,ey;//end node int map[200][200];//mark array int a[8][2] = {{1,2},{2,1},{1,-2},{2,-1},{-1,-2},{-2,-1},{-1,2},{-2,1}};//transfer array int result[10000]; int bfs(){ for(int i = 0;i < 200; i++) for(int j = 0;j < 200; j++) map[i][j] = -1; Node node; node.row = sx - 1; node.col = sy - 1; queue<Node> q; q.push(node); map[node.row][node.col] = 0; while(!q.empty()){ Node nowNode = q.front(); q.pop(); int row = nowNode.row; int col = nowNode.col; if(row == ex - 1 && col == ey - 1){ return map[row][col]; }else{ Node nextNode; for(int i = 0;i < 8;i++){ nextNode.row = row + a[i][0]; nextNode.col = col + a[i][1]; if(nextNode.row >= 0 && nextNode.row < 200 && nextNode.col >= 0 && nextNode.col < 200 && map[nextNode.row][nextNode.col] == -1){ map[nextNode.row][nextNode.col] = map[row][col] + 1; q.push(nextNode); } } } } return -1; } int main() { cin >> n; for(int i = 0;i < n;i++){ cin >> sx >> sy >> ex >> ey; result[i] = bfs(); } for(int j = 0;j < n;j++){ cout << result[j] << endl; } return 0; }
标签:跳马
原文地址:http://blog.csdn.net/mangoer_ys/article/details/46573381