zoukankan      html  css  js  c++  java
  • hdu A strange lift

    有起点和终点,有方向,有最少次数,所以这道题很明显是一道bfs的题目,这题要利用vist数组来标记已走过的楼层,因为这题里面已走过的楼层是不可能在走第二遍的。

    第二次走和第一次走的选择没有任何的区别。

    #include"iostream"
    #include"stdio.h"
    #include"string.h"
    #include"algorithm"
    #include"cmath"
    #include"queue"
    #define mx 205
    using namespace std;
    int n,a,b;
    int k[mx];
    int vist[mx];
    struct node
    {
        int x,times;
        friend bool operator<(node t1,node t2)
        {
            return t2.times<t1.times;
        }
    };
    bool judge(int x)
    {
        if(x>=1&&x<=n&&!vist[x]) return true;
        return false;
    }
    void bfs()
    {
        node cur,next;
        int i;
        cur.x=a;cur.times=0;
        priority_queue<node>q;
        q.push(cur);
        while(!q.empty())
        {
            cur=q.top();
            q.pop();
            if(cur.x==b){cout<<cur.times<<endl;return;}
            for(i=0;i<2;i++)
            {
                next.x=cur.x+pow(-1,i)*k[cur.x];
                if(judge(next.x))
                {
                    next.times=cur.times+1;
                    vist[next.x]=1;
                    q.push(next);
                }
            }
        }
        cout<<-1<<endl;
    }
    int main()
    {
        while(cin>>n,n)
        {
            int i;
            cin>>a>>b;
            for(i=1;i<=n;i++) cin>>k[i];
            memset(vist,0,sizeof(vist));
            vist[a]=1;bfs();
        }
        return 0;
    }
    View Code
  • 相关阅读:
    linux:yum
    python:公共操作
    python 控制流程
    linux:lamp环境
    linux:nginx
    深圳:永安在线-安全
    linux:mysql
    linux:shell
    linux:项目上线
    linux:权限管理
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4330978.html
Copyright © 2011-2022 走看看