• POJ 1915


    #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;
    }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    iMX6Q开发板的EIM接口的配置可以与FPGA通讯-交换数据-最常用的接口配置
    大受喜欢安卓触控一体机连接云端数据化管理提供例程DEMO
    iTOP-4418开发板所用核心板研发7寸/10.1寸安卓触控一体机
    i.MX6ULL终结者Buildoot文件系统构建篇buildroot添加支持第三方软件
    所有教程为迅为原创-3399开发板资料更新了
    如果使用4412开发板那么怎么搭建和测试TFTP服务器
    iMX6ULL开发板Linux 4G通信实验EC20 4G模块配置
    iMX6ULL终结者Linux WIFI驱动实验rtl8723 Wifi联网测试
    iTOP4412开发板Android5.1.1移植教程
    迅为iTOP3399开发板人工智能(图像分类)
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4566574.html
Copyright © 2020-2023  润新知