Description

Input
Output
Sample Input
3 8 0 0 7 0 100 0 0 30 50 10 1 1 1 1
Sample Output
5 28 0
代码:
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct point{
int x;
int y;
int step;
}p, pp;
int d[8][2] = { { -2, 1 }, { -1, 2 }, { 1, 2 }, { 2, 1 }, { -2, -1 }, { -1, -2 }, { 1, -2 }, { 2, -1 } };
int x_1, y_1, x_2, y_2, l;
int vis[500][500];
queue<point>s;
bool isok(int x, int y)
{
if (x >= 0 && x < l&&y >= 0 && y < l)
return true;
return false;
}
int bfs()
{
if (x_1 == x_2&&y_1 == y_2)
return 0;
while (!s.empty())
s.pop();
p.x = x_1, p.y = y_1;
p.step = 0;
s.push(p);
vis[x_1][y_1] = 1;
while (!s.empty())
{
p = s.front();
s.pop();
if (p.x == x_2&&p.y == y_2)
return p.step;
for (int i = 0; i < 8; i++){
int xx = p.x + d[i][0];
int yy = p.y + d[i][1];
if (isok(xx, yy) && !vis[xx][yy]){
vis[xx][yy] = 1;
pp.x = xx, pp.y = yy;
pp.step = p.step + 1;
s.push(pp);
}
}
}
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
scanf("%d", &l);
scanf("%d%d", &x_1, &y_1);
scanf("%d%d", &x_2, &y_2);
memset(vis, 0, sizeof(vis));
printf("%d\n", bfs());
}
return 0;
}
POJ 1915 Knight Moves,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u012964281/article/details/38144731