hdu 1180 诡异的楼梯
来源:互联网 发布:魔兽争霸对战平台mac 编辑:程序博客网 时间:2024/06/09 20:17
hdu 1180 诡异的楼梯
楼梯诡异是因为楼梯每一分钟它都会变换方向 竖直方向与水平方向轮流交换
找优先队列的题找到这题的 所以就会往优先队列的方向去向 显然就是以走过的步数作为排序的条件
这题中跨越梯子的那步是不算的 而且可以在原地等一步梯子转到自己要走的方向 所以在遇到梯子的时候就需要进行判断 然后跨越梯子之后判断有木有到达终点
这题中n m值与常规遇到的不一样。。。。
代码如下:
#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <string.h>#include <string>#include <queue>#define eps 1e-8#define op operator#define MOD 10009#define MAXN 100100#define FOR(i,a,b) for(int i=a;i<=b;i++)#define FOV(i,a,b) for(int i=a;i>=b;i--)#define REP(i,a,b) for(int i=a;i<b;i++)#define REV(i,a,b) for(int i=a-1;i>=b;i--)#define MEM(a,x) memset(a,x,sizeof a)#define ll __int64using namespace std;struct node{ int x,y; int step; bool operator <(const node p)const { return step>p.step; }};int m,n;node p,q;char map[25][25];int vis [25][25];int sx,sy,tx,ty;int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int check(int x,int y,int t,int d){ if(t%2==0) { if(map[x][y]=='|') { if(d==0||d==1) t++; } else { if(d==2||d==3) t++; } } else { if(map[x][y]=='-') { if(d==0||d==1) t++; } else { if(d==2||d==3) t++; } } return t+1;}void bfs(){ priority_queue<node> Q; p.x=sx; p.y=sy; p.step=0; Q.push(p); while(!Q.empty()) { p=Q.top(); Q.pop(); if(p.x==tx&&p.y==ty) { printf("%d\n",p.step); return; } for(int i=0;i<4;i++) { q.x=p.x+dir[i][0]; q.y=p.y+dir[i][1]; q.step=p.step; if(q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&!vis[q.x][q.y]&&map[q.x][q.y]!='*') { if(map[q.x][q.y]=='.'||map[q.x][q.y]=='T') { q.step++; vis[q.x][q.y]=1; if(q.x==tx&&q.y==ty) { printf("%d\n",q.step); return; } Q.push(q); } if(map[q.x][q.y]=='|'||map[q.x][q.y]=='-') { int num,xx,yy; num=check(q.x,q.y,q.step,i);// q.step=num; xx=q.x+dir[i][0]; yy=q.y+dir[i][1]; if(xx>=0&&xx<m&&yy>=0&&yy<n&&!vis[xx][yy]&&map[xx][yy]!='*') { q.x=xx; q.y=yy; q.step=num; vis[q.x][q.y]=1;// Q.push(q); if(q.x==tx&&q.y==ty) { printf("%d\n",q.step); return; } Q.push(q); } } } } }}int main(){//freopen("ceshi.txt","r",stdin); while(scanf("%d%d",&m,&n)!=EOF) { for(int i=0;i<m;i++) { scanf("%s",map[i]); for(int j=0;j<n;j++) { if(map[i][j]=='S') { sx=i; sy=j; } if(map[i][j]=='T') { tx=i; ty=j; } } } MEM(vis,0); bfs(); } return 0;}
0 0
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- Hdu-1180(诡异的楼梯)
- HDU 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- 诡异的楼梯 hdu 1180
- HDU-1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180诡异的楼梯
- HDU 1180诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- IOS自定义UI控件
- 在 $_SERVER 中访问的最重要的元素
- C语言中volatile关键字的作用
- SystemUI 概述
- SDK下载地址
- hdu 1180 诡异的楼梯
- C++11新标准之一: 新的基本内置类型
- MediaChooser的gridview加载图片的方法
- 图像旋转的实现
- HDU--1548:A strange lift (BFS)
- GPS 定位测试
- ZOJ Monthly, August 2014
- 关于Struts2中struts.xml配置Action的一点说法——约定大于配置
- 【java】为数组所有元素赋相同的值 以及 数组之间的复制