HDU 1548 A strange lift(Dijkstra,简单BFS)
题目大意:
电梯有两个选项向上或向下,每层楼有一个参数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)的更多相关文章
- 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 ...
- HDU 1548 A strange lift (Dijkstra)
A strange lift http://acm.hdu.edu.cn/showproblem.php?pid=1548 Problem Description There is a strange ...
- HDU 1548 A strange lift(最短路&&bfs)
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- hdu 1548 A strange lift (dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 题目大意:升降电梯,先给出n层楼,然后给出起始的位置,即使输出从A楼道B楼的最短时间. 注意的几 ...
- hdu 1548 A strange lift
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Description There is a strange li ...
- 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 ...
- HDU 1548 A strange lift (最短路/Dijkstra)
题目链接: 传送门 A strange lift Time Limit: 1000MS Memory Limit: 32768 K Description There is a strange ...
- hdu 1548 A strange lift (bfs)
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 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 ...
随机推荐
- 模拟QQ系统设置面板实现功能
业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本 ...
- java字符操作获取汉字的拼音以及其它经常使用工具
公司需求年年有,今年有点小特殊,哈哈. 忽然加了个需求,说要实现汉字转拼音查询. 在努力下写出来了,如今分享一下吧!.! /** * 汉字转拼音缩写 * * @param str * 要转换的汉字字符 ...
- <Win32_18>平滑的人物走动 —— 解决闪屏
今天咋一看,发现很久没写博客了 的确,开学之后,写博客的时间越来越少了…… 今天来做一个比较实用的小应用——平滑的人物走动,同时解决常见的闪屏问题.实现透明位图 这些技术在游戏开发中是很常见的 --- ...
- Swift学习笔记十三:继承
一个类能够继承(inherit)还有一个类的方法(methods),属性(property)和其他特性 一.基本的语法 class Human{ var name :String init(){ na ...
- Controller@实现Controller的两种形式
实现Controller的两种形式 形式1:仅仅实现IController接口,自定义Controller对Request的实现.形式2:在实现IController接口以后,继承Controller ...
- 搭建python集成开发环境.
需要搭建的内容一共有三项, python ,wxpython 以及spe. 其中spe 是python 的可视化集成开发环境(ide) , 其需要python GUI图形库wxpython的支 ...
- ORACLE实例恢复过程详细分析--使用dump、BBED等多种工具结合分析
---友情提示,内容较多,可以从博文左上的+目录选择小节方便阅读. 实验思路: --实验相关TRACE文件:http://download.csdn.net/detail/q947817003/6 ...
- 第1章 软件测试基本概念(Week1,3月3日)
一.对软件的认识 1. 什么是软件 2. 软件的分类 3. 软件开发的生命周期模型 (1)瀑布模型 (2)Scrum 其实对用瀑布模型这种臃肿不堪.要求严格.而无法适应软件开发周期变化的开发模型,渐渐 ...
- android studio 报错,google后无果
你可能在环境变量中配置了adk的环境变量,同时eclipse可studio公用一个avd,在两个之间切换时过出错
- 操作引入xml文件的书包(定位到指定节点)
定位到指定节点:e0.1 <chtml><we>@{_samples/test.xml:HtokID=e0.1}</we></chtml> 上述表达式表 ...