题目

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

#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. hdu 1318 Palindromes(回文词)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1318 题意分析:输入每行包含一个字符串,判断此串是否为回文串或镜像串. 表面上看这道题有些复杂,如果能 ...

  2. trident 序列号问题

    在使用Storm的trident做流计算开发时,遇到一个诡异的问题: 我继承IPartitionedTridentSpout或者IOpaquePartitionedTridentSpout接口做事务型 ...

  3. Codevs 2833 奇怪的梦境

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还 ...

  4. Essential C++ 学习笔记02--Array/Vector 与指针

    Essential C++ 1.5-1.6节,3.1节笔记 Array/Vector/指针,难度偏大, 但若学习初期不熟悉基本用法,则难以写出有效代码. 1. 基本概念 Array 是一段连续内存,数 ...

  5. Base64加密

    实际开发中可能需要使用到可解密的加密方式,例如客户端记住用户的密码,客户端不能记住明文密码,那就需要对明文密码进行加密,然后在表单提交之后先对密码进行解密,在进行MD5加密和数据库中的密码进行比较实现 ...

  6. Firefox 与 IE 对Javascript和CSS的区别

    1. document.formName.item("itemName") 问题 说明:IE下,可以使用document.formName.item("itemName& ...

  7. 6.struts登陆页面的演示

    1.创建一个web project "Struts_1" 添加struts的jar包 --在项目文件右键->myeclipse->add struts...       ...

  8. Java包的命名规则

    按照惯例,包申明遵循特定的格式.虽然不是严格要求的Java语法,如果不遵循格式要求,大多数的Java认为你是不懂Java. 从右到左的顺序是: 1.systaxExample表明包的本地名称. 2.e ...

  9. MongoDB的常用命令

    [转]http://blog.csdn.net/ithomer/article/details/17111943 mongodb由C++编写,其名字来自humongous这个单词的中间部分,从名字可见 ...

  10. CSS3 animation小动画

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...