HDU 1180 诡异的楼梯
诡异的楼梯
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 6457 Accepted Submission(s): 1523
比如下面的例子里,一开始楼梯在竖直方向,一分钟以后它移动到了水平方向,再过一分钟它又回到了竖直方向.Harry发现对他来说很难找到能使得他最快到达目的地的路线,这时Ron(Harry最好的朋友)告诉Harry正好有一个魔法道具可以帮助他寻找这样的路线,而那个魔法道具上的咒语,正是由你纂写的.
注意: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 诡异的楼梯相关推荐
- HDU 1180 诡异的楼梯(超级经典的bfs之一,需多回顾)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1180 诡异的楼梯
诡异的楼梯 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total Submis ...
- HDOJ/HDU 1180 诡异的楼梯(经典BFS-详解)
Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在 ...
- hdu1180 诡异的楼梯(BFS+优先队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 诡异的楼梯(BFS)
诡异的楼梯 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里 ...
- 【算法设计与分析】HDU-1108 C++诡异的楼梯(BFS迷宫最短路径)
一.题目描述 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里 ...
- 诡异的楼梯 bfs
诡异的楼梯 原题链接https://vjudge.net/contest/345248#problem/M 由题意可知,题目大概还是一个迷宫问题,大概思路不变,但是需要增加情况,对于到楼梯前的时候我们 ...
- PPOJ1100: 诡异的楼梯
题目: http://pipioj.online/problem.php?id=1100 题目描述:PIPI准备去升华楼的404自习室上晚自习,但是他发现某些楼梯并不是静止不动的,相反,他们每隔一分钟 ...
- 杭电OJ分类题目(1)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(1) HDU Introduction HDU ...
最新文章
- HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
- 漫画:程序教你寻找股票买入卖出的最佳时机(动态规划)
- Java多线程间的通信
- SAP实施项目中顾问与客户的有效沟通
- boost::contract模块实现loop的测试程序
- Hibernate 一对一注释
- Jest 测试框架 beforeEach 的设计原理解析
- socket通信简介
- mysql命令书写顺序_MySQL SQL语句书写顺序和执行顺序
- c# uri.host_C#| 具有示例的Uri.Host属性
- Arthas简单入门与初步实践
- 我赢助手详解:抖音变现目前流行的是七种方式之直播变现和Ip变现
- 微信二维码扫描下载APK
- rono在oracle的作用_细节见真章,OPPO Reno多项品质测试,这才是最真实表现
- 老男孩46期—冯仁波
- python中的lambda函数
- 计算机985博士带进高校的配偶,部分本科、全国985硕士、博士应届毕业生可直接落户上海...
- 一个数据块影响的数据范围的查询方法/ROWID分解方法
- 在下拉列表框中实现placeholder
- YUYV(YUV422)转YUV420算法