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 ...
随机推荐
- 在MAC系统里添加开机启动任务(但是怎么才能知道自己程序的固定位置呢?)
公司最近购进了几台MAC台式电脑,要在上面为一个项目做测试. MAC这么高大上的东西,还是第一次接触,折腾了半天好不容易安装了一些需要的应用服务上去,跑了一下还不错. 公司提倡节约用电,下班之后要把所 ...
- 使用CDN对动态网站内容加速有效果吗
个资源文件,有利于减少原始服务器的压力. 缓存网页内容 对于动态网站而言,部分访问量大的网页内容可能改观不大,好比论坛的首页,置顶的帖子很少泛起大转变,因此这样的网页可 ...
- Kivy: Crossplatform Framework for NUI
Kivy: Crossplatform Framework for NUI ivy - Open source Python library for rapid development of appl ...
- Oracle10g数据泵EXPDP和IMPDP备份与恢复数据
Oracle10g数据泵EXPDP和IMPDP备份与恢复数据 一.数据库备份前准备工作 新建备份DIRECTORY目录,并授权给用户 步骤: 1.登录sqlplus 账户名:ptemp 密码:0000 ...
- static在C和C++中的用法和区别
static主要有三个作用: (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数 前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍: 一.局部静态变量 在C/C+ ...
- 基于visual Studio2013解决C语言竞赛题之1049抓牌排序
题目 解决代码及点评 /* 功能:插入排序.许多玩牌的人是以这样的方式来对他们手中的牌进行排序的: 设手中原有3张牌已排好序,抓1张新牌,若这张新牌的次序在原来的第2张牌之后,第 3 ...
- 【iOS】网页中调用JS与JS注入
非常多应用为了节约成本,做出同一时候在Android与iOS上都能使用的界面,这时就要使用WebView来做.Android和IOS上都有WebView,做起来非常省事.当然这时就要考虑怎样在Andr ...
- Restful 和 Jersey介绍(Web Service )
一:REST简单介绍 REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之中的一个. REST 中最重要的概念是资源(reso ...
- ASP.NET - 使用 XML
对XML文件进行简单的增加,删除,修改,查看等功能. XML代码: <?xml version="1.0" encoding="UTF-8"?> & ...
- MySQL生成-单据号不重复
需求生成一个单据编号 单据编号结构: “单据类型” + “日期” + “流水号” 例子 : GD201605230000007 代码: DELIMITER $$ CREATE PROCEDURE `y ...