题目大意:

电梯有两个选项向上或向下,每层楼有一个参数ki,代表电梯可以再该楼层的基础上向上或向下移动ki层,限制条件是向上不能超过楼层总数n,向下不能少于一。输入总层数n和当前所在层数以及目标层数,然后是n个数分别代表第i层的移动范围。输出最少移动次数,若不可达,输出-1.

解题思路:

1.用Dijkstra算法,首先构建邻接矩阵,注意在构造时,要考虑i-k[i]<1和i+k[i]>n,i代表当前所在层。

 #include<string.h>
#include<stdio.h>
#define INF 0x3f3f3f3f
int k[];
int g[][];
int dis[],vis[];
int t,s,d,x,y;
int a,b,n;
void dijkstra(int start)
{
int i,j,k;
memset(vis,,sizeof(vis));//初始化vis数组,标记为都未访问过。
for(i=; i<=n; i++)
{
if(i==start)
dis[i]=;
else
dis[i]=INF;
}//除起始点外,其他点的dis都赋为正无穷
for(i=; i<=n; i++)
{
int r;
int min=INF;
for(j=; j<=n; j++)
if(!vis[j]&&dis[j]<min)
{
min=dis[j];
r=j;
}找出当前未被访问的点中权值最小的点,对所有从该点出发的边进行松弛。
vis[r]=;
for(k=; k<=n; k++)//松弛操作
if(dis[k]<(dis[r]+g[r][k]))
dis[k]=dis[k];
else
dis[k]=dis[r]+g[r][k];
}
return;
}
int main()
{
int i;
while(scanf("%d",&n)!=EOF&&n)
{
memset(g,INF,sizeof(g));
scanf("%d%d",&a,&b);
for(i=; i<=n; i++)
{
scanf("%d",&k[i]);
}
for(i=; i<=n; i++)
{
if(i-k[i]<)
g[i][k[i]+i]=;
if(i+k[i]>n)
g[i][i-k[i]]=;
if(i-k[i]>=&&i+k[i]<=n)
{
g[i][k[i]+i]=;
g[i][i-k[i]]=;
}
}
dijkstra(a);
if(dis[b]==INF)
printf("-1\n");
else
printf("%d\n",dis[b]);
}
return ;
}

2.BFS算法:

有向上走和向下走两种方法:

 #include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
int n, start,end;
int a[];
bool vis[], flag;
struct node
{
int x, step;//x记录当前所在层,step记录已经走了几次
} n1, n2, m;
int main()
{
int i;
while(scanf("%d", &n)!=EOF)
{
if(n== )
break;
scanf("%d %d", &start,&end);
for(i = ; i <= n; i++)
{
scanf("%d", &a[i]);
vis[i] = false;
}
flag = false;
n1.x = start;
n1.step = ;
queue<node> Q;
Q.push(n1);//起始点入队列
vis[n1.x] = true;
while(!Q.empty())
{
m = Q.front();
Q.pop();
if(m.x == end)
{
flag = true;
break;
}
n1.x = m.x - a[m.x];
n2.x = m.x + a[m.x];
if(n1.x> && n1.x<=end && !vis[n1.x])
{
n1.step = m.step + ;
vis[n1.x] = true;
Q.push(n1);
}
if(n2.x> && n2.x<=end && !vis[n2.x])
{
n2.step = m.step + ;
vis[n2.x] = true;
Q.push(n2);
}
}
if(flag)
printf("%d\n", m.step);
else
printf("-1\n");
}
return ;
}

HDU 1548 A strange lift(Dijkstra,简单BFS)的更多相关文章

  1. hdu 1548 A strange lift 宽搜bfs+优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at ...

  2. HDU 1548 A strange lift (Dijkstra)

    A strange lift http://acm.hdu.edu.cn/showproblem.php?pid=1548 Problem Description There is a strange ...

  3. HDU 1548 A strange lift(最短路&&bfs)

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. hdu 1548 A strange lift (dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 题目大意:升降电梯,先给出n层楼,然后给出起始的位置,即使输出从A楼道B楼的最短时间. 注意的几 ...

  5. hdu 1548 A strange lift

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Description There is a strange li ...

  6. HDU 1548 A strange lift (bfs / 最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Time Limit: 2000/1000 MS (Java/Ot ...

  7. HDU 1548 A strange lift (最短路/Dijkstra)

    题目链接: 传送门 A strange lift Time Limit: 1000MS     Memory Limit: 32768 K Description There is a strange ...

  8. hdu 1548 A strange lift (bfs)

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  9. HDU 1548 A strange lift(BFS)

    Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...

随机推荐

  1. Python 第六篇(中):面向对象编程中级篇

    面向对象编程中级篇: 编程思想概述: 面向过程:根据业务逻辑从上到下写垒代码  #最low,淘汰 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 #混口饭吃 def add(ho ...

  2. 在SSH框架中使用Spring的好处(转)

    以下是我总结下今天笔试中SSh中的总结: 在SSH框架中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不 ...

  3. 使用CDN对动态网站内容加速有效果吗

      个资源文件,有利于减少原始服务器的压力.        缓存网页内容        对于动态网站而言,部分访问量大的网页内容可能改观不大,好比论坛的首页,置顶的帖子很少泛起大转变,因此这样的网页可 ...

  4. NOI08冬令营 数据结构的提炼与压缩

    无聊随手翻,翻到了一个这样的好东西--据结构的提炼与压缩: 为了防止以后忘记,这里把论文里的题目都纪录一下吧. 1.二维结构的化简 问题一:ural 1568 Train car sorting 定义 ...

  5. SVN库迁移

    最后库迁移.机会主义的,在源库资源,然后上传到目标库,最后client更新url地址.的库被组长一眼识破,由于新库中没有大家的操作日志. 这次吸取上次的教训,用dump和load完毕SVN库迁移. 整 ...

  6. 区间dp模型之括号匹配打印路径 poj(1141)

    题目链接:Brackets Sequence 题目描写叙述:给出一串由'(')'' [ ' ' ] '组成的串,让你输出加入最少括号之后使得括号匹配的串. 分析:是区间dp的经典模型括号匹配.解说:h ...

  7. Ajax Post提交事例及SpringMVC注解@RequestMapping取不到参数值解决办法

    var xmlHttp; //定义变量,用来创建xmlHttp对象 function ajaxfunction(url,onreadystatechangMethod,param){ // 创建xml ...

  8. perl 当前包会覆盖父类的同名方法

    12.5.2 访问被覆盖的方法: 当一个类定义一个方法,那么该子过程覆盖任意基类中同名的方法. [root@wx03 test]# cat Horse.pm package Horse; our @I ...

  9. C# c++ 传递函数指针

    C#和c++之间相互传递函数指针 在C++和C#之中都有很多callback method,可以相互调用吗,怎么传递,是我表弟的问题. 1.定义c++ dll ,导出方法 // sort.cpp : ...

  10. sql: update from

    sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式 中引 ...