题目

挺简单的一道广搜题,只要用判断时间是偶数还是奇数就可以判断楼梯的方位,但是我这傻逼居然写了那么久啊那么久,我果然秀逗了,,,,

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 30
int map[MAXN][MAXN],n,m;
bool vis[MAXN][MAXN];
struct tt
{
int x,y,step;
};
queue<tt>q;
int xx[]={,,,-};
int yy[]={,-,,};
int bfs(int x,int y)
{
while(!q.empty())
q.pop();
memset(vis,false,sizeof(vis));
tt front,rear,temp;
front.x=x;front.y=y;front.step=;
q.push(front);
vis[x][y]=true;
while(!q.empty())
{
temp=q.front();
q.pop();
if(map[temp.x][temp.y]=='T')
return temp.step;
for(int i=;i<;i++)
{
rear.x=temp.x+xx[i];
rear.y=temp.y+yy[i];
rear.step=temp.step+;
if(rear.x>=&&rear.x<n&&rear.y>=&&rear.y<m&&map[rear.x][rear.y]!='*'&&vis[rear.x][rear.y]==false)
{
if(map[rear.x][rear.y]=='.'||map[rear.x][rear.y]=='T')
{
q.push(rear);
vis[rear.x][rear.y]=true;
}
if(xx[i]==)
{
if(map[rear.x][rear.y]=='-')
{
if(rear.y+yy[i]>=&&rear.y+yy[i]<m&&(map[rear.x][rear.y+yy[i]]=='.'||map[rear.x][rear.y+yy[i]]=='T')&&vis[rear.x][rear.y+yy[i]]==false)
{ if(rear.step%==)
rear.y=rear.y-yy[i];
else
rear.y=rear.y+yy[i],vis[rear.x][rear.y]=true;
q.push(rear);
}
}
else if(map[rear.x][rear.y]=='|')
{
if(rear.y+yy[i]>=&&rear.y+yy[i]<m&&(map[rear.x][rear.y+yy[i]]=='.'||map[rear.x][rear.y+yy[i]]=='T')&&vis[rear.x][rear.y+yy[i]]==false)
{
if(rear.step%)
rear.y=rear.y-yy[i];
else
rear.y=rear.y+yy[i],vis[rear.x][rear.y]=true;
q.push(rear);
}
}
}
if(yy[i]==)
{
if(map[rear.x][rear.y]=='|')
{
if(rear.x+xx[i]>=&&rear.x+xx[i]<n&&(map[rear.x+xx[i]][rear.y]=='.'||map[rear.x+xx[i]][rear.y]=='T')&&vis[rear.x+xx[i]][rear.y]==false)
{ if(rear.step%==)
rear.x=rear.x-xx[i];
else
rear.x=rear.x+xx[i],vis[rear.x][rear.y]=true;
q.push(rear);
}
}
else if(map[rear.x][rear.y]=='-')
{
if(rear.x+xx[i]>=&&rear.x+xx[i]<n&&(map[rear.x+xx[i]][rear.y]=='.'||map[rear.x+xx[i]][rear.y]=='T')&&vis[rear.x+xx[i]][rear.y]==false)
{
if(rear.step%)
rear.x=rear.x-xx[i];
else
rear.x=rear.x+xx[i],vis[rear.x][rear.y]=true;
q.push(rear);
}
}
}
}
}
}
return ;
} int main()
{
int i,j,sx,sy,ans;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=;i<n;i++)
{
getchar();
for(j=;j<m;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='S')
{
sx=i;sy=j;
}
}
}
ans=bfs(sx,sy);
printf("%d\n",ans);
}
return ;
} /*
1 3
S|T
1 3
S-T
20 20
S.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.|
|.|.|.|.|.|.|.|.|.|.
.|.|.|.|.|.|.|.|.|.T
5 5
**..T
**.*.
..|..
.*.*.
S....
*/

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:诡异的楼梯(BFS广搜)

    诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

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

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

  4. HDU 1180 诡异的楼梯(BFS)

    诡异的楼梯 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  5. HDU 1180 诡异的楼梯【BFS/楼梯随时间变化】

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

  6. hdu 1180 诡异的楼梯

    诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

  7. hdu 1180 诡异的楼梯 (bfs)

    诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Sub ...

  8. hdu 1180诡异的楼梯(bfs)

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

  9. HDU 1180 诡异的楼梯 (广搜)

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

随机推荐

  1. 2016.10.30 济南学习 Day2 下午 T1

    他 [问题描述] 一张长度为N的纸带,我们可以从左至右编号为0 − N(纸带最左端标号为 0).现在有M次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带 的长度是多少. [输入格式] 第一行 ...

  2. Mac 如何恢复出厂设置

    首先将电脑关机然后按电源键启动启动的时候电脑会出现白色什么都没有的界面这时按住 option(alt)键会出现磁盘选择界面然后选择一个叫 Reocorvry10.X.X的硬盘点击那个硬盘按照上面的指示 ...

  3. 使用记事本+CSC编译程序

    本次学习主要阐明.NET开发可以不使用VS,也能像Java一样使用命令窗口.但实际意义不大. 诸位看管不必太留意.(仅供留着给公司新人,树(tree)新(new)风(bee)用.) 1.新建一个文本文 ...

  4. [大牛翻译系列]Hadoop(13)MapReduce 性能调优:优化洗牌(shuffle)和排序阶段

    6.4.3 优化洗牌(shuffle)和排序阶段 洗牌和排序阶段都很耗费资源.洗牌需要在map和reduce任务之间传输数据,会导致过大的网络消耗.排序和合并操作的消耗也是很显著的.这一节将介绍一系列 ...

  5. WordPress 主题开发 - (一) 前言 待翻译

    原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...

  6. 22 高级SQL特性

    1.约束 为正确地进行关系数据库设计,需要一种方法来保证只在表中插入合法的数据.例如,如果Orders表存储订单信息,OrderItems表存储订单详细内容,应该保证Orderitems中引用的任何订 ...

  7. Java中main函数参数String args[] 和 String[] args 区别

    其实没什么区别的:当初我也是这样的疑问,呵呵:非要说区别就看下面:执行效果上没有不同, 但在语法意义上略有不同. 比如, String与String[], 前者叫字符串类型而后者叫字符串数组类型. S ...

  8. 【js】js 让图片旋转

     转http://www.cnblogs.com/ustcyc/p/3760116.html 核心: canvas.style.filter = "progid:DXImageTransfo ...

  9. 【quartz】 数据库方式管理任务

    public static void Run(bool inClearJobs, bool inScheduleJobs) { var properties = new NameValueCollec ...

  10. 2016 系统设计第一期 (档案一)MVC 控制器接收表单数据

    1.FormCollection collection   user.UserId =Convert.ToInt32(collection["UserId"]); /// < ...