HDU 1548 A strange lift (简单最短路或BFS)
2015-08-27 15:17
309 查看
题意:电梯每层有一个不同的数字,例如第n层有个数字k,那么这一层只能上k层或下k层,但是不能低于一层或高于n层,给定起点与终点,要求出最少要按几次键思路:一开始的想法是搜索,而且搜索也是可行的,不过既然这道题出在了最短路的专题里面,自然也要尝试下最短路的做法,要注意的是,这道题是单向边,我们只要让map里面的值全部为1就可以统计次数了 首先是最短路的Dijkstra
#include<iostream> #include<vector> using namespace std; const int maxn=205,inf=1<<29; int n,m,s,e; int vis[maxn],d[maxn],Map[maxn][maxn]; void Dijkstra() { fill(vis,vis+maxn,0); fill(d,d+maxn,inf); d[s]=0; while(1) { int v=-1; for(int i=1;i<=n;i++) if(!vis[i]&&(v==-1||d[v]>d[i])) v=i; if(v==-1) break; vis[v]=1; for(int i=1;i<=n;i++) d[i]=min(d[i],d[v]+Map[v][i]); } } int main() { while(cin>>n,n) { fill(&Map[0][0],&Map[maxn][0],inf); cin>>s>>e; for(int i=1;i<=n;i++) { int w; cin>>w; if(i+w<=n) Map[i][i+w]=1; if(i-w>=1) Map[i][i-w]=1; } Dijkstra(); if(d[e]==inf) cout<<-1<<endl; else cout<<d[e]<<endl; } return 0; }
然后是BFS
#include<iostream> #include<queue> #include<cstring> #include<cstdio> using namespace std; const int maxn=205; int v[maxn],n,a,b; bool vis[maxn]; struct node { int x,y; int s; bool friend operator < (node a,node b) { return a.s>b.s; } }; int dir[][2]={ {0,1},{-1,0},{0,-1},{1,0},{-1,1},{-1,-1},{1,-1},{1,1}}; // 右 上 左 下 右上 左上 左下 右下 //int dir[][2]={{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2}}; //马走日的8个方向 int bfs() { priority_queue<node>q; node now,t; now.x=a,now.s=0; q.push(now); memset(vis,0,sizeof(vis)); vis[a]=1; while(q.size()) { now=q.top();q.pop(); if(now.x==b) return now.s; for(int i=-1;i<=2;i+=2) { t=now; t.x+=i*v[t.x];t.s++; if(1<=t.x&&t.x<=n&&!vis[t.x]) { vis[t.x]=1; q.push(t); } } } return -1; } int main() { while(~scanf("%d",&n),n) { scanf("%d%d",&a,&b); for(int i=1;i<=n;i++) scanf("%d",&v[i]); cout<<bfs()<<endl; } return 0; }
相关文章推荐
- 安卓自定义状态栏颜色以与APP风格保持一致
- linux - 扫描技术与安全防范
- 树莓派开启声音
- windows系统——常用命令
- Command Pattern
- Hadoop学习笔记----阿冬专栏
- HAproxy 代理技术原理探究
- U盘用FAT32还是用NTFS格式好
- Cocoapods 安装
- CentOS上 svn客户端的安装及应用
- repo sync时出现contains uncommitted changes的错误提示
- 手动编译APK的流程
- Java学习笔记---流程控制语句
- mysql数据库的汉字乱码问题
- iOS唯一标示符引导【UDID】
- 网络数据包从主机A传输到主机B的流程
- 两个Map合并 成一个map
- 【Android】 将Eclipse工程导入到Andorid Studio(包含SVN连接) 编码错误 非法字符: '\ufeff'
- Python数据库ORM SQLAlchemy 0.7学习笔记(4) 添加对象
- Leetcode Database - Oracle Partition