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 ...
随机推荐
- MinGW介绍与使用
3.1:MinGW 是什么? MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境.MinGW 收集了一系列免费的Windows 使用的头文件和库文件:同时整合了GNU ( ht ...
- Android智能手机屏蔽电话与屏蔽安装软件功能
近期做一些项目.须要对手机进行屏蔽自己的固有的功能.在此记录. Android屏蔽电话功能主要是卸载掉Phone.apk. 屏蔽安装软件功能主要是卸载掉PackageInstall.apk 以下以三星 ...
- WPF DataGrid 增加"更新"模板列,根据行Row的选择而显示"更新"按钮
SelectionMode="Single" <DataGridTemplateColumn Header=""> <DataGridTemp ...
- SpringMVC 返回字符串
今天看到一段代码,关于SpringMVC的Controller中返回字符串的代码,这段代码被我称为2b代码(英文名:2b Code). @RequestMapping(value="twoB ...
- python gzip 压缩文件
压缩数据创建gzip文件 先看一个略麻烦的做法 ? 1 2 3 4 5 6 import StringIO,gzip content = 'Life is short.I use python' zb ...
- UPC 2959: Caoshen like math 这就是个水题
http://acm.upc.edu.cn/problem.php?id=2959 这就是个水题,之所以要写这个题是感觉很有纪念意义 用力看就是盲……23333333333333333 这个题就是最小 ...
- tcp接收xml数据解析
避免tcp接收xml数据时加上xml数据长度,根据xml数据特点来解析recv到的xml数据 int nPos1 = 0; int nPos2 = 0; int nTempPos = 0; int n ...
- 重操JS旧业第六弹:基本类型包装
在前面已经知道js中的类型有boolean,string,number,undefined,function,object,其中boolean,number,string为值类型.所谓的基本类型包装, ...
- 浮点数在计算机内存中的表示(IEEE 754规定1位是符号位,8位是指数,剩下的23位为有效数字)
本文转载自:阮一峰的博客,http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html 张玉彬的博客 h ...
- mssql 返回表的创建语句
if OBJECT_ID('sp_create_table_sql','P') is not null drop proc sp_create_table_sql go create proc sp_ ...