杭电1180 诡异的楼梯
来源:互联网 发布:nginx配置静态页面 编辑:程序博客网 时间:2024/06/02 10:58
BFS
题目大意是说:给你一张地图,给你起点,终点,问你从起点走到终点的最少时间(一格是一时间单位),简单来说就是BFS 求最短路径问
题;
这个题需要注意的是:如果走到楼梯上,且当时楼梯是不可走状态,可以原地呆在那(当时没看见,WA五六遍,,,),等楼梯可走时再走
;
题目大意是说:给你一张地图,给你起点,终点,问你从起点走到终点的最少时间(一格是一时间单位),简单来说就是BFS 求最短路径问
题;
这个题需要注意的是:如果走到楼梯上,且当时楼梯是不可走状态,可以原地呆在那(当时没看见,WA五六遍,,,),等楼梯可走时再走
;
可以直接写BFS,也可以优先队列;
#include<stdio.h>#include<string.h>#include<math.h>#include<queue>#include<algorithm>using namespace std;struct point{ int x,y,step;};point bg;char mp[25][25];int mark[25][25];int dir[4][2] = { {1,0},{-1,0},{0,-1},{0,1} };int bfs(){ queue<point> ss; ss.push(bg); mark[bg.x][bg.y]=0; while(ss.size()) { point f=ss.front(); ss.pop(); for(int i=0; i<4; i++) { point g; g.x = f.x + dir[i][0]; g.y = f.y + dir[i][1]; g.step = f.step + 1; if(mp[g.x][g.y] != '*' && mark[g.x][g.y] > g.step) { if( mp[g.x][g.y] == '-') { if((f.step&1)&&(i>=2))//两个if判断楼梯当前状态是否可走,若不可走,将原地址加入队列,时间加一; { g.x = f.x, g.y = f.y; mark[g.x][g.y] = g.step; ss.push(g); continue; } if(((f.step&1)==0)&&(i<2)) { g.x = f.x, g.y = f.y; mark[g.x][g.y] = g.step; ss.push(g); continue; } g.x = g.x + dir[i][0] , g.y = g.y + dir[i][1]; if( mark[g.x][g.y] <= g.step ) continue; if(mp[g.x][g.y]=='.')//判断楼梯后面是否可走; { mark[g.x][g.y] = g.step; ss.push(g); } else if(mp[g.x][g.y]=='T') return g.step; } else if(mp[g.x][g.y]=='|') { if((f.step&1)&& i<2) { g.x = f.x, g.y = f.y; mark[g.x][g.y] = g.step; ss.push(g); continue; } if( ((f.step&1)==0) && i>= 2) { g.x = f.x, g.y = f.y; mark[g.x][g.y] = g.step; ss.push(g); continue; } g.x = g.x + dir[i][0] ,g.y = g.y + dir[i][1]; if( mark[g.x][g.y]<=g.step ) continue; if(mp[g.x][g.y]=='.') { mark[g.x][g.y] = g.step; ss.push(g); } else if(mp[g.x][g.y]=='T') return g.step; } else if(mp[g.x][g.y]=='.') { mark[g.x][g.y] = g.step; ss.push(g); } else if(mp[g.x][g.y]=='T') return g.step; } } } return 0;}int main(){ int m,n; while(scanf("%d%d",&m,&n)!=EOF) { for(int i=0; i<22; i++) for(int j=0; j<22; j++) mp[i][j]='*', mark[i][j]=0x3f3f3f3f; for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) { scanf(" %c",&mp[i][j]); if( mp[i][j]=='S' ) mp[i][j]='.', bg.x=i, bg.y=j, bg.step=0; } } printf("%d\n",bfs()); } return 0;}
0 0
- 杭电1180 诡异的楼梯
- 杭电1180 诡异的楼梯
- 杭电acm1180 诡异的楼梯
- 【搜索之BFS + 优先队列】杭电 hdu 1180 诡异的楼梯
- 杭电1180——诡异的楼梯(BFS+优先队列)
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- Hdu-1180(诡异的楼梯)
- HDOJ 1180: 诡异的楼梯
- HDU 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- 诡异的楼梯 hdu 1180
- HDU-1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180诡异的楼梯
- dhu 1180 诡异的楼梯
- HDU 1180诡异的楼梯
- 高仿IOS---Dialog(底部式)
- 面向对象的特征
- read/fread write/fwrite 的区别
- 给label加中划线
- 黑马程序员------String类
- 杭电1180 诡异的楼梯
- Android向PHP后台传数组类型的参数似的问题
- jQuery数据缓存$.data 的使用以及源码解析
- IPV6表示
- 一次打PSU的感触
- 杭电 5506 GT and set
- mysql explain 各列的含义
- 拓扑结构相同子树练习题
- 杭电 2059 龟兔赛跑