zoukankan      html  css  js  c++  java
  • 洛谷P1135奇怪的电梯-题解

    原题:

     思路:

    对于每一个楼层,只有上和下两种情况

    将上和下分别入队跑BFS即可

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,a,b;
    int move_count[205];
    bool arrived_floor[205];
    bool flag=true;
    int nxt[2]={1,-1};
    queue<int> queue_floor_number;
    queue<int> queue_state_number;
    void BFS()
    {
        while(!queue_floor_number.empty()&&!queue_state_number.empty())
        {
            int queue_floor_front=queue_floor_number.front();
            int queue_state_front=queue_state_number.front();
            queue_floor_number.pop();
            queue_state_number.pop();
            if(queue_floor_front==b)
            {
                printf("%d
    ",queue_state_front);
                flag=false;
                return;
            }
            for(int i=0;i<2;i++)
            {
                int tf=queue_floor_front+(nxt[i]*move_count[queue_floor_front]);
                if(!arrived_floor[tf]&&tf>=1&&tf<=n)
                {
                    queue_floor_number.push(tf);
                    queue_state_number.push(queue_state_front+1);
                    arrived_floor[tf]=true;
                }
            }
        }
    }
    int main()
    {
        scanf("%d %d %d",&n,&a,&b);
        for(int i=1;i<=n;i++)
            scanf("%d",&move_count[i]);
        queue_floor_number.push(a);
        queue_state_number.push(0);
        BFS();
        if(flag)
            printf("-1
    ");
        return 0;
    }
    

    补充:

    这道题可以考虑记忆化。

    对于每个楼层,记忆它们到达目标点的最小步数。

  • 相关阅读:
    第十一周作业
    第十周作业
    第九周编程
    第十二周作业
    第十一周作业
    第十周作业
    第八周作业
    第七周作业
    第五周作业
    2019春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/lujin49/p/13445066.html
Copyright © 2011-2022 走看看