博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1548 A strange lift BFS 简单题
阅读量:4317 次
发布时间:2019-06-06

本文共 1295 字,大约阅读时间需要 4 分钟。

一个电梯有n层,每一层有一个数k[i],和2个按钮,UP和DOWN,表示从这一层可以到达i+k[i] 或i-k[i] .

给出a,b,问从a到b 最少需要按多少下按钮。

直接bfs.

 

1 #include
2 #include
3 #include
4 using namespace std; 5 const int maxn=210; 6 int n,a,b; 7 int k[maxn]; 8 bool vis[maxn]; 9 int time[maxn];10 int bfs()11 {12 memset(vis,false,sizeof(vis));13 queue
que;14 while(!que.empty())15 que.pop();16 que.push(a);17 vis[a]=true;18 time[a]=0;19 while(!que.empty())20 {21 int u=que.front();22 que.pop();23 if(u==b)24 return time[b];25 if(u-k[u]>0&&!vis[u-k[u]])26 {27 que.push(u-k[u]);28 vis[u-k[u]]=true;29 time[u-k[u]]=time[u]+1;30 }31 if(u+k[u]<=n&&!vis[u+k[u]])32 {33 que.push(u+k[u]);34 vis[u+k[u]]=true;35 time[u+k[u]]=time[u]+1;36 }37 }38 return -1;39 }40 int main()41 {42 while(scanf("%d%d%d",&n,&a,&b))43 {44 if(!n)45 break;46 for(int i=1;i<=n;i++)47 scanf("%d",&k[i]);48 int ans=bfs();49 printf("%d\n",ans);50 }51 return 0;52 }
提交代码

 

 

转载于:https://www.cnblogs.com/-maybe/p/4394180.html

你可能感兴趣的文章
K-Means聚类和EM算法复习总结
查看>>
[转]Bat脚本处理ftp超强案例解说
查看>>
P3901 数列找不同
查看>>
利用无线网络数据包分析无线网络安全
查看>>
MEMBER REPORT
查看>>
[HAOI2006]受欢迎的牛
查看>>
使用jquery去掉时光轴头尾部的线条
查看>>
算法(转)
查看>>
网络字节顺序
查看>>
复制mueclipse项目到eclipse
查看>>
飞扬的小鸟
查看>>
玩转TypeScript(2) --简单TypeScript类型
查看>>
Asp.net 解析json
查看>>
程序猿崛起3——这一次,我用行动说话
查看>>
201521123038 《Java程序设计》 第一周学习总结
查看>>
每天一个linux命令(20):find命令之exec
查看>>
MVC HtmlHelper用法大全
查看>>
SQL分布式查询、跨数据库查询
查看>>
python国内豆瓣源
查看>>
redux、immutablejs和mobx性能对比(三)
查看>>