• 奇怪的电梯解题报告


    问题描述

      简单来说就是当你在第i层时可以上i层下i层,问需要这样多少次能到达需要到的终点 n<=200 

    分析

      楼层数不大,考虑最坏情况:所有楼层都走过了但还是没有到终点的复杂度:

        因为走过的楼层不会再走,队列内最多只有200个元素,所以可以用广度优先搜索,每次搜索向上和向下两种情况,找到了想到的楼层就输出结束。

    代码:

      

    #include<iostream>
    #include<cstdio>
    #define MAXN 100000+20
    using namespace std;
    int num[MAXN];
    int arr[MAXN];

    int main(){
    freopen("lift.in","r",stdin);
    freopen("lift.out","w",stdout);
    int que[10000+20];
    int head=0,tail=0;
    int n,from,to;
    scanf("%d%d%d",&n,&from,&to);
    for(int i=1;i<=n;i++)
    scanf("%d",&num[i]);
    que[++tail]=from;
    arr[from]=0; //不走的时候是0
    while(head<tail){
    int &x=que[head+1];
    if(x==to){
    printf("%d",arr[x]);
    return 0;
    }
    if((x+num[x]<=n) && ( !arr[x+num[x]])){ //上楼梯的情况
    que[++tail]=x+num[x];
    arr[x+num[x]]=arr[x]+1; //每走一次+1
    }
    if((x-num[x]>0) && ( !arr[x-num[x]])){ //下楼梯的情况
    que[++tail]=x-num[x];
    arr[x-num[x]]=arr[x]+1; //每走一次+1
    }
    head++;
    } //搜索结束,没有答案就输出-1
    printf("-1");
    return 0;
    }

  • 相关阅读:
    Leetcode86.分隔链表
    Leetcode39.组合总和
    Leetcode31.下一个排列
    剑指Offer35.复杂链表复制
    剑指Offer14-I.剪绳子
    剑指Offer38.字符串的排序
    Leetcode29.两数相除
    232. Implement Queue using Stacks
    程序员跳槽指南
    226. Invert Binary Tree
  • 原文地址:https://www.cnblogs.com/1-1-1-1/p/5195967.html
Copyright © 2020-2023  润新知