poj 1915 http://poj.org/problem?id=1915

/**<  */#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <queue>
#include <ctype.h>
#define N 310

using namespace std;

int d[8][2] = {{-2, -1}, {-2, 1}, {-1, -2}, {-1, 2}, {1, -2}, {1, 2}, {2, -1}, {2, 1}};
int vis[N][N], l, ex, ey;

struct node
{
    int x, y, step;
};

int BFS(int x, int y)
{
    queue<node>Q;
    int i;
    node now, next;
    now.x = x;
    now.y = y;
    now.step = 0;
    vis[now.x][now.y] = 1;
    Q.push(now);
    while(!Q.empty())
    {
        now = Q.front();
        Q.pop();
        if(now.x == ex && now.y == ey)
            return now.step;
        for(i = 0 ; i < 8 ; i++)
        {
            next.x = now.x + d[i][0];
            next.y = now.y + d[i][1];
            next.step = now.step + 1;
            if(next.x >= 0 && next.x < l && next.y >= 0 && next.y < l && !vis[next.x][next.y])
            {
                vis[next.x][next.y] = 1;
                Q.push(next);
            }
        }
    }
    return -1;
}

int main()
{
    int t, sx, sy;
    scanf("%d", &t);
    while(t--)
    {
        memset(vis, 0, sizeof(vis));
        scanf("%d", &l);
        scanf("%d%d", &sx, &sy);
        scanf("%d%d", &ex, &ey);
        if(sx == ex && sy == ey)
            printf("0\n");
        else
            printf("%d\n", BFS(sx, sy));
    }
    return 0;
}

 

posted @ 2015-05-29 09:00  午夜阳光~  阅读(254)  评论(0编辑  收藏  举报