跳格子
来源:互联网 发布:淘宝商品没有规格 编辑:程序博客网 时间:2024/04/28 21:57
解题思路
这道题可以用bfs和动态规划去做。bfs就是枚举每一个位置能走的步数入队,动规就是利用上一次的最优解。下面直接看代码
代码
//动态规划解法#include<cstdio>#include<iostream>using namespace std;int a[20]={};int main(){ int b[20]; int t;//t组数据 scanf("%d",&t); while(t>0) { int n,i,j; scanf("%d",&n); for(i=0;i<n;++i) { scanf("%d",&a[i]); } for(i=0;i<n;++i) { b[i]=100;//因为n最大为20 最多为20步; } b[0]=0;//b[0]一定要初始化为0,第一个格子不用走 for(i=0;i<n;++i) //i控制当前格子 { for(j=1;j<=a[i];++j) //j控制每一步跳多少个格子 { b[i+j] = min(b[i+j],b[i]+1);//b[i+j]表示跳j个格子到达哪个位置,选取当前位置的步数值和一步跳j个格子走到这个位置中步数最少的那个 } } b[n-1]==100?printf("-1\n"):printf("%d\n",b[n-1]);//b[n-1]==100说明没图跳到过终点 t--; } return 0;}
//bfs解法#include<cstdio>#include<iostream>#include<queue>using namespace std;int a[100];int i,j;int n;struct node{ int x,t;// x表示当前走到的那个格子的编号,t表示步数;};queue<node>q;int bfs(){ node s; s.x=0;s.t=0;//初始位置 q.push(s);//让初始位置入队 while(!q.empty())//队列不为空,为空的话就说明每种情况列举完了 { node now=q.front();//保存队首元素信息 q.pop(); //抛出队首元素,以便下一次使用 for(i=1;i<=a[now.x];++i) //枚举每一种走法(一次跳1格、2格...a[now.x]格)now.x表示当前站的格子的编号,而a[now.x]表示当前站的格子里面写的数 { node New; //走到一个新的位置 New.x=now.x+i; //这个位置是通过上一个格子一步跳几个格子得到的 New.t=now.t+1; //步数加1 q.push(New); //新的到的格子入队; if(New.x==n-1) return New.t;//如果新的到的格子已经是终点了,就可以返回结果了 } } return -1;//没能到达终点。}int main(){ cin>>n; while(n--) { int m; cin>>m; for(i=0;i<m;++i) { cin>>a[i]; } } int ans=bfs(); cout<<ans<<endl; return 0;}
2 0
- 跳格子
- 跳格子
- 跳格子
- 跳格子问题
- 跳格子问题
- Jason跳格子
- 智力题--跳格子
- 9.2 跳格子 SSl2712
- SSL P2712 跳格子
- jzoj 2048. 【8.18】跳格子
- 网易笔试问题--跳格子
- UESTC 1686——跳格子
- 跳格子问题——阿里笔试
- 阿里笔试——跳格子问题
- LeetCode 55. Jump Game(跳格子)
- HNUST 1695: 跳格子(简单模拟)
- 2013-3-17 集训 Problem H: 跳格子 搜索
- LeetCode 45. Jump Game II(跳格子)
- React-Native 之Android应用开发踩坑纪 (一)————windows环境下配置
- 设计模式--单例模式
- Android SwipeRefreshLayout 下拉刷新组件的使用
- leetcode 113. Path Sum II
- 云通信-腾讯云,TLS独立模式公私钥生成
- 跳格子
- C#的Socket编程基础
- KVM架构与原理详解
- 项目14-三角形类雏形(2)
- 快速熟悉Django架构
- 启用跨站资源共享(备忘)
- 博客由Hexo迁移到CSDN
- java线程中yield(),sleep(),wait()区别详解
- 欧拉函数(模板) nyoj333