码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1915

时间:2015-06-10 17:10:13      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream>
#include<stdio.h>
#define MAXN 350
#include"queue"
using namespace std;
bool mark[MAXN][MAXN];
struct point
{
    int x;
    int y;
    int step;
    point()
    {
        step = 0;
    }
};
bool bfs(point p);
point b;
int num;
point e;
point tem;
queue<point> coll;
int main()
{
    //freopen("acm.acm","r",stdin);
    int test;
    int ans;
    cin>>test;
    while(test --)
    {
        //memset(road,0,sizeof(road));
        memset(mark,false,sizeof(mark));
        cin>>num;
        cin>>b.x>>b.y;
        cin>>e.x>>e.y;
        if(b.x == e.x && b.y == e.y)
        {
            cout<<0<<endl;
            continue;
        }
        coll.push(b);
        mark[b.x][b.y] = true;
    //    cout<<"----------"<<endl;
        while(!coll.empty() && !bfs(coll.front()) )
        {
            //cout<<"-================"<<endl;
        //    cout<<coll.front().x<<endl;
        //    cout<<coll.front().y<<endl;
            //break;
            coll.pop();
        }
        while(!coll.empty())
        {
            coll.pop();
        }
    }
}

bool bfs(point p)
{
    if(p.x - 2 >= 0)
    {
        if(p.y - 1 >= 0 && !mark[p.x - 2][p.y - 1])
        {
            tem.x = p.x - 2;
            tem.y = p.y - 1;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else
                coll.push(tem);
        }
        if(p.y + 1 < num && !mark[p.x - 2][p.y + 1])
        {
            tem.x = p.x - 2;
            tem.y = p.y + 1;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else 
                coll.push(tem);
        }
    }
    ////////////////
    if(p.x + 2 < num)
    {
        if(p.y - 1 >= 0 && !mark[p.x + 2][p.y - 1])
        {
            tem.x = p.x + 2;
            tem.y = p.y - 1;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else
                coll.push(tem);
        }
        if(p.y + 1 < num && !mark[p.x + 2][p.y + 1])
        {
            tem.x = p.x + 2;
            tem.y = p.y + 1;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else 
                coll.push(tem);
        }
    }

    ///////////////////
    if(p.y - 2 >= 0)
    {
        if(p.x - 1 >= 0 && !mark[p.x - 1][p.y - 2])
        {
            tem.x = p.x - 1;
            tem.y = p.y - 2;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else
                coll.push(tem);
        }
        if(p.x + 1 < num && !mark[p.x + 1][p.y - 2])
        {
            tem.x = p.x + 1;
            tem.y = p.y - 2;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else 
                coll.push(tem);
        }
    }
    //////////////////////
    if(p.y + 2 < num)
    {
        if(p.x - 1 >= 0 && !mark[p.x - 1][p.y + 2])
        {
            tem.x = p.x - 1;
            tem.y = p.y + 2;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else
                coll.push(tem);
        }
        if(p.x + 1 < num && !mark[p.x + 1][p.y + 2])
        {
            tem.x = p.x + 1;
            tem.y = p.y + 2;
            tem.step = p.step + 1;
            mark[tem.x][tem.y] = true;
            if(tem.x == e.x && tem.y == e.y)
            {
                cout<<tem.step<<endl;
                return true;
            }
            else 
                coll.push(tem);
        }
    }
    return false;
}

 

POJ 1915

标签:

原文地址:http://www.cnblogs.com/gavinsp/p/4566574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!