诡异的楼梯

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 6457    Accepted Submission(s): 1523

Problem Description
Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向.
比如下面的例子里,一开始楼梯在竖直方向,一分钟以后它移动到了水平方向,再过一分钟它又回到了竖直方向.Harry发现对他来说很难找到能使得他最快到达目的地的路线,这时Ron(Harry最好的朋友)告诉Harry正好有一个魔法道具可以帮助他寻找这样的路线,而那个魔法道具上的咒语,正是由你纂写的.
Input
测试数据有多组,每组的表述如下: 第一行有两个数,M和N,接下来是一个M行N列的地图,'*'表示障碍物,'.'表示走廊,'|'或者'-'表示一个楼梯,并且标明了它在一开始时所处的位置:'|'表示的楼梯在最开始是竖直方向,'-'表示的楼梯在一开始是水平方向.地图中还有一个'S'是起点,'T'是目标,0<=M,N<=20,地图中不会出现两个相连的梯子.Harry每秒只能停留在'.'或'S'和'T'所标记的格子内.
Output
只有一行,包含一个数T,表示到达目标的最短时间.
注意:Harry只能每次走到相邻的格子而不能斜走,每移动一次恰好为一分钟,并且Harry登上楼梯并经过楼梯到达对面的整个过程只需要一分钟,Harry从来不在楼梯上停留.并且每次楼梯都恰好在Harry移动完毕以后才改变方向.

5 5
**..T
**.*.
..|..
.*.*.
S....

7

以前看过这一题,又想起了以前对搜索的态度.....囧。

诡异的电梯

亮点
{

增加了电梯   “ | "   "-",我的处理太麻烦了,代码写了好长...以后来更新。

}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define HH 1111111
char a[22][22];
int min,time[22][22],zhan[5000],f;
int map[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void bfs(int x,int y,int n,int m)
{int i,x1,y1,w,z;zhan[++f]=x;zhan[++f]=y;time[x][y]=0;while(f>0){y=zhan[f--];x=zhan[f--];for(i=0;i<4;i++){x1=x+map[i][0];y1=y+map[i][1];if(x1>=1&&x1<=n && y1>=1&&y1<=m){if(a[x1][y1]=='T'){if(time[x1][y1]>time[x][y]+1)time[x1][y1]=time[x][y]+1;//continue;
                }if(a[x1][y1]=='.'&&time[x1][y1]>time[x][y]+1){time[x1][y1]=time[x][y]+1;zhan[++f]=x1;zhan[++f]=y1;}else if(a[x1][y1]=='|'){w=map[i][0];z=map[i][1];if(a[x1+w][y1+z]=='*')continue;if(x==x1 && y1!=y){if(time[x][y]%2==0||time[x][y]==0){if(time[x1+w][y1+z]>time[x][y]+2){    time[x1+w][y1+z]=time[x][y]+2;zhan[++f]=x1+w;zhan[++f]=y1+z;}}else if(time[x1+w][y1+z]>time[x][y]+1){time[x1+w][y1+z]=time[x][y]+1;zhan[++f]=x1+w;zhan[++f]=y1+z;}}else if(x1!=x && y==y1){if(time[x][y]%2==0){if(time[x1+w][y1+z]>time[x][y]+1){//    printf("sss\n");time[x1+w][y1+z]=time[x][y]+1;zhan[++f]=x1+w;zhan[++f]=y1+z;}}else if(time[x1+w][y1+z]>time[x][y]+2){time[x1+w][y1+z]=time[x][y]+2;zhan[++f]=x1+w;zhan[++f]=y1+z;}}                    }else if(a[x1][y1]=='-'){w=map[i][0];z=map[i][1];if(a[x1+w][y1+z]=='*') continue;if(x==x1 && y1!=y){if(time[x][y]%2==0){if(time[x1+w][y1+z]>time[x][y]+1){    time[x1+w][y1+z]=time[x][y]+1;zhan[++f]=x1+w;zhan[++f]=y1+z;}}else if(time[x1+w][y1+z]>time[x][y]+2){time[x1+w][y1+z]=time[x][y]+2;zhan[++f]=x1+w;zhan[++f]=y1+z;}}else if(x!=x1 && y==y1){if(time[x][y]%2==0){if(time[x1+w][y1+z]>time[x][y]+2){time[x1+w][y1+z]=time[x][y]+2;zhan[++f]=x1+w;zhan[++f]=y1+z;}}else if(time[x1+w][y1+z]>time[x][y]+1){time[x1+w][y1+z]=time[x][y]+1;zhan[++f]=x1+w;zhan[++f]=y1+z;}}}}}}
}int main()
{int n,m,i,j,x,y;while(scanf("%d%d",&n,&m)>0){if(n==0&&m==0)break;for(i=1;i<=n;i++)scanf("%s",a[i]+1);for(i=1;i<=n;i++)for(j=1;j<=m;j++)time[i][j]=HH;for(i=1;i<=n;i++)for(j=1;j<=m;j++){if(a[i][j]=='S'){f=0;bfs(i,j,n,m);}if(a[i][j]=='T'){x=i;y=j;}}printf("%d\n",time[x][y]);}return 0;
}

转载于:https://www.cnblogs.com/tom987690183/archive/2013/05/14/3077632.html

HDU 1180 诡异的楼梯相关推荐

  1. HDU 1180 诡异的楼梯(超级经典的bfs之一,需多回顾)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)     ...

  2. HDU 1180 诡异的楼梯

    诡异的楼梯 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Submis ...

  3. HDOJ/HDU 1180 诡异的楼梯(经典BFS-详解)

    Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在 ...

  4. hdu1180 诡异的楼梯(BFS+优先队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)     ...

  5. hdu 诡异的楼梯(BFS)

    诡异的楼梯 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向.  比如下面的例子里 ...

  6. 【算法设计与分析】HDU-1108 C++诡异的楼梯(BFS迷宫最短路径)

    一.题目描述 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里 ...

  7. 诡异的楼梯 bfs

    诡异的楼梯 原题链接https://vjudge.net/contest/345248#problem/M 由题意可知,题目大概还是一个迷宫问题,大概思路不变,但是需要增加情况,对于到楼梯前的时候我们 ...

  8. PPOJ1100: 诡异的楼梯

    题目: http://pipioj.online/problem.php?id=1100 题目描述:PIPI准备去升华楼的404自习室上晚自习,但是他发现某些楼梯并不是静止不动的,相反,他们每隔一分钟 ...

  9. 杭电OJ分类题目(1)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(1) HDU Introduction HDU ...

最新文章

  1. HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
  2. 漫画:程序教你寻找股票买入卖出的最佳时机(动态规划)
  3. Java多线程间的通信
  4. SAP实施项目中顾问与客户的有效沟通
  5. boost::contract模块实现loop的测试程序
  6. Hibernate 一对一注释
  7. Jest 测试框架 beforeEach 的设计原理解析
  8. socket通信简介
  9. mysql命令书写顺序_MySQL SQL语句书写顺序和执行顺序
  10. c# uri.host_C#| 具有示例的Uri.Host属性
  11. Arthas简单入门与初步实践
  12. 我赢助手详解:抖音变现目前流行的是七种方式之直播变现和Ip变现
  13. 微信二维码扫描下载APK
  14. rono在oracle的作用_细节见真章,OPPO Reno多项品质测试,这才是最真实表现
  15. 老男孩46期—冯仁波
  16. python中的lambda函数
  17. 计算机985博士带进高校的配偶,部分本科、全国985硕士、博士应届毕业生可直接落户上海...
  18. 一个数据块影响的数据范围的查询方法/ROWID分解方法
  19. 在下拉列表框中实现placeholder
  20. YUYV(YUV422)转YUV420算法

热门文章

  1. 12月26日二周二次【Python基础语法】
  2. Android实时取景:用SurfaceView实现
  3. Sublime使用的插件和快捷键
  4. SQL Server 2016 AlwaysOn 安装及配置介绍
  5. Mac环境下用Java(Sikuli+Robot)实现页游自动化
  6. 对象的引用和clone
  7. hibernate开启二级缓存
  8. jquery tooltip
  9. [心情]说说作为新手的困惑
  10. left join on in