诡异的楼梯 HDU1180
这题做了很久
做好了感觉很简单。。。 现在做题思路更加清晰了
一个要点就是 当楼梯过不去的时候不能是先过去时间加2 必须得回去等一秒 否则queue的时间顺序会被打破
#include<bits/stdc++.h>
using namespace std; int sx,sy,ex,ey;int n,m;
char m1[][];
bool f[][]; struct node
{
int x,y,d;
node(int x=,int y=,int d=):x(x),y(y),d(d){}
}; void bfs()
{
memset(f,false,sizeof(f));
int dx[]={,,,-};
int dy[]={,,-,};
node u(sx,sy,);
queue<node>q;
q.push(u); while(!q.empty())
{
u=q.front();q.pop();
// printf("%d %d %d\n",u.x,u.y,u.d);
if(u.x==ex&&u.y==ey){printf("%d\n",u.d);return;} for(int i=;i<;i++)
{
node v(u.x+dx[i],u.y+dy[i],u.d+); if(v.x>=&&v.x<=n&&v.y>=&&v.y<=m&&m1[v.x][v.y]!='*')
{ if(m1[v.x][v.y]=='|')
{
if(i==||i==)//shuiping
{
if(v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);} else if (v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];q.push(v);} }
if(i==||i==)
{
if(v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];f[v.x][v.y]=true;q.push(v);} else if (v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);}
} } if(m1[v.x][v.y]=='-')
{
if(i==||i==)//shuiping
{
if(v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];q.push(v);} else if (v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);} }
if(i==||i==)
{
if(v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);} else if (v.d%==&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];f[v.x][v.y]=true;q.push(v);}
} } else if(f[v.x][v.y]==false&&(m1[v.x][v.y]=='.'||v.x==ex&&v.y==ey))
{
f[v.x][v.y]=true;q.push(v);
} } } } } int main()
{ while(scanf("%d%d",&n,&m)==)
{
for(int i=;i<=n;i++)
{
scanf("%s",m1[i]+);
for(int j=;j<=m;j++)
{
if(m1[i][j]=='S'){sx=i;sy=j;}
if(m1[i][j]=='T'){ex=i;ey=j;} } } // printf("%d %d %d %d\n",sx,sy,ex,ey);
bfs();
//printf("pl"); } return ;
}
诡异的楼梯 HDU1180的更多相关文章
- 诡异的楼梯(bfs)hdu1180
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submiss ...
- 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:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- hdu 1180诡异的楼梯(bfs)
诡异的楼梯 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total Submis ...
- hdu 1180:诡异的楼梯(BFS广搜)
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...
- 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 Submis ...
- HDU_1180_诡异的楼梯_BFS
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Me ...
随机推荐
- C# cmd调用外部命令
void test2() { Process process = new Process(); //C:\\Users\\Administrator\\Desktop\\ffmpeg\\bin\\ff ...
- TwemProxy Redis架构
TwemProxy 1.twemproxy是twitter开发的一个redis代理proxy. 通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免redis单点故障问题. ...
- 关于JS事件冒泡与JS事件代理(事件委托)
连接:https://blog.csdn.net/supercoooooder/article/details/52190100 核心代码: <ul id="parentUl" ...
- JavaSE之Math类
下列哪个选项是正确计算42度(角度)的余弦值? double d=Math.cos(42) double d=Math.cosine(42) double d=Math.cos(Math.toRadi ...
- Freemarker导出带图片的word
1.新建一doc文档
- C++ explicit 关键字
原文转自:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造 ...
- ubuntu 下 teamview 取消自动启动 autostart
sudo teamviewer daemon disable
- ES系列一、CentOS7安装ES 6.3.1、集成IK分词器
Elasticsearch 6.3.1 地址: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3. ...
- python 中is和== 的理解
Python中的对象包含三要素:id.type.value其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值is判断的是a对象是否就是b对象,是通过id来判断的==判断的是a对 ...
- UNIX网络编程读书笔记:I/O模型(阻塞、非阻塞、I/O复用、信号驱动、异步)
I/O模型 UNIX下可用的5种I/O模型: (1)阻塞I/O (2)非阻塞I/O (3)I/O复用(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O 对于一个套接口上的 ...