hdu 1180 诡异的楼梯(广搜,简单)
挺简单的一道广搜题,只要用判断时间是偶数还是奇数就可以判断楼梯的方位,但是我这傻逼居然写了那么久啊那么久,我果然秀逗了,,,,
#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 诡异的楼梯(广搜,简单)的更多相关文章
- HDU 1180 诡异的楼梯(超级经典的bfs之一,需多回顾)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1180:诡异的楼梯(BFS广搜)
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...
- HDOJ/HDU 1180 诡异的楼梯(经典BFS-详解)
Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在 ...
- HDU 1180 诡异的楼梯(BFS)
诡异的楼梯 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- HDU 1180 诡异的楼梯【BFS/楼梯随时间变化】
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submis ...
- hdu 1180 诡异的楼梯
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...
- hdu 1180 诡异的楼梯 (bfs)
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Sub ...
- hdu 1180诡异的楼梯(bfs)
诡异的楼梯 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total Submis ...
- HDU 1180 诡异的楼梯 (广搜)
题目链接 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一 ...
随机推荐
- 杭电ACM2098--分拆素数和
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2098 这是源码.其实我本不想拿出源码,毕竟源码很容易被复制. 我这里刚开始出错的地方有 0_0_12811 ...
- IC卡的逻辑卡号和市民卡卡号
CPU卡,IC卡等的卡号与卡在出厂时的卡号.
- unity打包android游戏部分问题总结
一:虚拟导航栏挡到游戏按钮: 解决方案如下: 1.获取焦点的时候隐藏 虚拟导航条 Navigation bar 隐藏导航条 2.出现导航条的时候,改变游戏界面大小 Unity tidbits: cha ...
- 字符串反转(charat)
package com.java1234.chap03.sec08; public class zifufanzhuan { public static void main(String[] args ...
- 【Qt】QWidget、QDialog、QMainWindow的异同点【转】
简述 在分享所有基础知识之前,很有必要在这里介绍下常用的窗口-QWidget.QDialog.QMainWindow. 熟悉Qt的同学都应该知道,在新建Qt Widgets项目进行类信息选择时会碰到它 ...
- DataGridview动态添加列
1.获取数据源(select * from table名称) 2.动态绑定数据源 private void GetTableInfo(DataTable dt) { listBh = new List ...
- WinFrom下连接字符串的数据库文件路径问题
一直以为连接字符串中的系统变量|DataDirectory|就是在ASP.NET中代替App_Data的绝对路径.原来在WinForm程序中也能用|DataDirectory|,不过指代的是exe文件 ...
- nginx配置:支持phpfastcgi,nginx和php-cgi通信,部分nginx常量解释
支持phpfastcgi的配置如下: server { listen 8000; server_name localhost; root F:/home/projects/test; i ...
- Python默认模块 os和shutil 实用函数
os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 ' ...
- GDB调试详解
GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调 ...