zoukankan      html  css  js  c++  java
  • 奇怪的电梯解题报告

    问题描述

      简单来说就是当你在第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;
    }

  • 相关阅读:
    RESTClient使用
    web.xml 的加载过程
    I18N、L10N、G11N
    Oracle游标示例
    MyEclipse转换Eclipse项目无法启动问题(转)
    eclipse默认文件编码
    JAVA为什么要配置环境变量,怎样配置
    TODO Auto-generated method stub
    vc6开发ActiveX并发布全攻略(三)(转)
    高效使用hibernate-validator校验框架
  • 原文地址:https://www.cnblogs.com/1-1-1-1/p/5195967.html
Copyright © 2011-2022 走看看