hdu1180诡异的楼梯(bfs)
来源:互联网 发布:淘宝网背带裤 编辑:程序博客网 时间:2024/06/02 10:57
这道题的意思是哈利波特要从S走到T,中间有那种会改变方向的楼梯,经过楼梯的话一共只用一秒,但是可能会存在有特殊的楼梯会一秒改变一次方向,也就是说可能会等一秒,不会有两个楼梯连续挨着,还有很重要的一点就是,你不能再楼梯上呆一秒,所以当你找到楼梯的时候,不能把他直接压进队列,要直接对它进行处理,然后把处理过的压进队列,这点一定要切记,再者就是在遇到楼梯的时候,先用步数的奇偶来判断此时楼梯的方向,然后看此时自己的方向和楼梯的方向是否为同一个方向,然后就很好操作了
#include <iostream>#include <string.h>#include <queue>using namespace std;char s[30][30];bool vis[30][30];int dir[30][30];int xx[4][2]= {{0,-1},{0,1},{1,0},{-1,0}};struct sa{ int x,y,step; friend bool operator<(sa a,sa b) { return a.step>b.step; }} a,p,t;priority_queue<sa>q;int m,n;int solve(){ while(!q.empty()) { sa a=q.top(); q.pop(); for(int i=0; i<4; i++) { int nx=a.x+xx[i][0]; int ny=a.y+xx[i][1]; if(nx>=0&&nx<m&&ny>=0&&ny<n) { char c; if(s[nx][ny]=='T') return a.step+1; else if(s[nx][ny]=='.'&&!vis[nx][ny]) { p.x=nx; p.y=ny; p.step=a.step+1; vis[nx][ny]=1; q.push(p); } else if(s[nx][ny]=='|'||s[nx][ny]=='-') { if(a.step%2==1) { if(s[nx][ny]=='-') c='|'; else if(s[nx][ny]=='|') c='-'; } else c=s[nx][ny]; p.x=nx+xx[i][0]; p.y=ny+xx[i][1]; if(c=='|'&&(xx[i][1]==1||xx[i][1]==-1)) p.step=a.step+1; else if(c=='-'&&(xx[i][0]==1||xx[i][0]==-1)) p.step=a.step+1; else p.step=a.step; //vis[p.x][p.y]=1; /* cout<<c<<" "<<xx[i][0]<<" "<<xx[i][1]<<endl; cout<<a.step<<endl; cout<<p.step<<endl;*/ if(p.x>=0&&p.x<m&&p.y>=0&&p.y<n) { if(s[p.x][p.y]=='T') { return p.step+1; } else if(!vis[p.x][p.y]) { p.step+=1; vis[p.x][p.y]=1; q.push(p); } } } } } } return 0;}int main(){ while(cin>>m>>n) { while(!q.empty()) q.pop(); memset(dir,0,sizeof(dir)); memset(s,0,sizeof(s)); memset(vis,0,sizeof(vis)); memset(s,0,sizeof(s)); for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { cin>>s[i][j]; if(s[i][j]=='S') { t.x=i; t.y=j; t.step=0; vis[i][j]=1; q.push(t); } if(s[i][j]=='|') dir[i][j]=1; if(s[i][j]=='-') dir[i][j]=-1; } } int ans=solve(); cout<<ans<<endl; } return 0;}/**1 3S|T*/
0 0
- hdu1180诡异的楼梯(bfs)
- HDU1180 诡异的楼梯--BFS
- hdu1180诡异的楼梯 bfs
- hdu1180诡异的楼梯(bfs)
- hdu1180 诡异的楼梯--BFS
- HDU1180-诡异的楼梯(bfs)
- HDU1180 诡异的楼梯(BFS)
- hdu1180 诡异的楼梯(BFS+优先队列)
- hdu1180 诡异的楼梯(优先队列bfs)
- hdu1180——诡异的楼梯(优先队列+bfs)
- hdu1180诡异的楼梯(BFS+优先队列)
- 【搜索-BFS】HDU1180诡异的楼梯
- hdu1180-诡异的楼梯(bfs+优先队列)
- hdu1180 诡异的楼梯 --bfs+优先级队列
- hdu1180 诡异的楼梯
- HDU1180 诡异的楼梯
- hdu1180 诡异的楼梯
- hdu1180诡异的楼梯
- spring中集合 list map的一些操作
- Hive权限控制和超级管理员的实现
- 栈和队列的实际应用:小猫钓鱼
- SQL语句性能调整原则
- 检测图像失焦、偏色、亮度异常
- hdu1180诡异的楼梯(bfs)
- 强制类型转换
- 正则表达式浅析
- Struts2 原理
- SPOJ COTCount on a tree 树上第k大(主席树)
- usb-otg-调试心得
- LeetCode | 1) Two sum
- 设计模式总结
- 继承的对象模型整理