HDU1180 诡异的楼梯--BFS
来源:互联网 发布:九尾凤钗淘宝 编辑:程序博客网 时间:2024/06/09 18:12
中文题目,大家自己去读。
与一般的广搜题目不同的是,这个题目中有一个变数,那就是楼梯的方向,这个地方坑了我好久。
(主要原因是自己手贱,在判断判断楼梯方向与当前方向是否一致的时候,最后没有返回0)。
我的做法是,
如果下一个点是楼梯的话,判断方向与现在所走的方向是否一致,如果一致,那么直接经过楼梯;
如果不一致的话,那么就等待1s钟的时间,让楼梯的方向转过来,使得楼梯的方向与当前所行走的方向一致。具体实现见源代码:
#include <iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;const int maxn=25;int map[maxn][maxn];int dis[maxn][maxn];struct node{ int x,y;}que[maxn*maxn*maxn];int sx,sy,tx,ty;int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; //上下,左右int n,m;void init(){ for(int i=0;i<=n;i++) { for(int j=0;j<=m;j++) { dis[i][j]=1000; } } dis[sx][sy]=0; return;}int ok(int d,int x,int t)//当前方向,当前桥的类型,当前时间。判断桥是否与当前方向一致{ if((d==0 || d==1) && x==2 && t%2==0) return 1; if((d==0 || d==1) && x==1 && t%2==1) return 1; if((d==2 || d==3) && x==1 && t%2==0) return 1; if((d==2 || d==3) && x==2 && t%2==1) return 1; return 0;//就是这里坑了我好久。。。}void bfs(){ int f=0,r=1; init(); node now; now.x=sx,now.y=sy; que[f]=now; while(f<r) { now=que[f++]; int x=now.x,y=now.y; if(x==tx && y==ty) { printf("%d\n",dis[x][y]); return; } node next; for(int i=0;i<4;i++) { int xx=x+dir[i][0],yy=y+dir[i][1]; int t=0; if(map[xx][yy]==-1) continue; if(map[xx][yy]==1 || map[xx][yy]==2)//横着的桥用1表示,竖着的桥用数字2表示,墙壁是-1,空地是0 { if(!ok(i,map[xx][yy],dis[x][y])) //暂时不能过桥,则停留1秒钟 t=1; xx+=dir[i][0]; yy+=dir[i][1]; } next.x=xx,next.y=yy; if(dis[xx][yy]<=dis[x][y]+1+t) continue; if(map[xx][yy]==0) //可以停留的地方 { dis[xx][yy]=dis[x][y]+1+t; que[r++]=next; } } } return;}int main(){// freopen("in.txt","r",stdin); char ch[10]; while(scanf("%d%d",&n,&m)==2) { gets(ch); memset(map,-1,sizeof(map)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { char c; scanf("%c",&c); if(c=='.' || c=='S' || c=='T') map[i][j]=0; if(c=='-') map[i][j]=1; if(c=='|') map[i][j]=2; if(c=='S') { sx=i; sy=j; } if(c=='T') { tx=i; ty=j; } } gets(ch); } bfs(); } return 0;}
- HDU1180 诡异的楼梯--BFS
- hdu1180诡异的楼梯 bfs
- hdu1180诡异的楼梯(bfs)
- hdu1180 诡异的楼梯--BFS
- HDU1180-诡异的楼梯(bfs)
- HDU1180 诡异的楼梯(BFS)
- hdu1180诡异的楼梯(BFS+优先队列)
- 【搜索-BFS】HDU1180诡异的楼梯
- hdu1180-诡异的楼梯(bfs+优先队列)
- hdu1180诡异的楼梯(bfs)
- hdu1180 诡异的楼梯 --bfs+优先级队列
- hdu1180 诡异的楼梯
- HDU1180 诡异的楼梯
- hdu1180 诡异的楼梯
- hdu1180诡异的楼梯
- HDU1180 诡异的楼梯
- HDU1180-诡异的楼梯
- ACM-BFS之诡异的楼梯——hdu1180
- OSI(Open Systems Interconnection)
- 虚拟机+ubuntu 图形界面和终端界面的切换
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
- nginx及apache不缓存配置;
- ida debug android so
- HDU1180 诡异的楼梯--BFS
- 要做一名合格的程序员
- 美好的生活
- 在Eclipse中使用JUnit4进行单元测试(高级篇)
- SD卡的读写和FatFS文件系统
- poj 1745 Divisibility
- 怎么办爱情
- 查询Oracle正在执行和执行过的SQL语句
- 学生成绩处理