hdu1180诡异的楼梯……bfs走迷宫……wa了16次,我太渣了

随机生成迷宫并自动寻路 bmpEditor 阅读详情
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int row,line,xx[4]={-1,1,0,0},yy[4]={0,0,-1,1};
char map[100][100];
bool vis[100][100];
struct node
{
	int x,y,step;
}st;
void init()
{
	int i,j;
	bool flag=1;
	for(i=0;i<row;i++)
		scanf("%s",map[i]);
	for(i=0;flag&&i<row;i++)
		for(j=0;flag&&j<line;j++)
			if(map[i][j]=='S')
			{
				st.x=i;
				st.y=j;
				st.step=0;
				flag=0;
			}
	memset(vis,0,sizeof(vis));
	vis[st.x][st.y]=1;
}
bool iscan(int x,int y)
{
	if(x<0||y<0||x>=row||y>=line||vis[x][y]||map[x][y]=='*')
		return 0;
	return 1;
}
void bfs()
{
	int i;
	queue<node>qq;
	node t1,t2;
	qq.push(st);
	while(qq.size())
	{
		t1=qq.front();
		qq.pop();
		if(map[t1.x][t1.y]=='T')
		{
			printf("%d\n",t1.step);
			return;
		}
		for(i=0;i<4;i++)
		{
			t2=t1;
			t2.x+=xx[i];
			t2.y+=yy[i];
			t2.step++;
			if(!iscan(t2.x,t2.y))
				continue;
			if(map[t2.x][t2.y]=='.'||map[t2.x][t2.y]=='T')
			{
				vis[t2.x][t2.y]=1;
				qq.push(t2);
			}
			else if((map[t2.x][t2.y]=='|'&&!(t1.step&1))||(map[t2.x][t2.y]=='-'&&(t1.step&1)))
			{
				if(i>1)
				{
					t2=t1;
					t2.step++;
					qq.push(t2);
					continue;
				}
				t2.x+=xx[i];
				if(!iscan(t2.x,t2.y))
					continue;
				vis[t2.x][t2.y]=1;
				qq.push(t2);
			}
			else
			{
				if(i<2)
				{
					t2=t1;
					t2.step++;
					qq.push(t2);
					continue;
				}
				t2.y+=yy[i];
				if(!iscan(t2.x,t2.y))
					continue;
				vis[t2.x][t2.y]=1;
				qq.push(t2);
			}
		}
	}
}
int main()
{
	while(scanf("%d%d",&row,&line)!=EOF)
	{
		init();
		bfs();
	}
}

HDU-1180 诡异楼梯BFS Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一方向. 比如下面的例子里,一开始楼梯在竖直方向,一分钟以后它移动到了水平方向,再过一分钟它又回到了竖直方向.Harry发现对他来说很难找到能使得他最快到达目的地的路线,这时Ron(Harry最好的朋友)告诉Harry正好有一个魔法道具... 阅读详情

相关推荐

HDU 1072 (基础BFS)

这个题 还有有点烦的……应该是我菜的缘故…… 其实刚开始一点问题都没有 就寻常的BFS过去 开始觉得他烦的时候 是我发现这道题他不能标记…… 对他可以回头 甚至是必须回头(例如案例二) 总之我的代码中还可以看到标记数组的痕迹 回头了 一旦有两个4离得近了 小于6步那么 就会死循环…… 所以就应该标记4 这个4不能让他来回   然后 我这个题我还用了优先队列 其实完全没有必要 ...

没什么卵用的学习记录 608

HDU - 2102 bfs简单题

#include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;map&gt; #include &lt;vector&gt; #include &lt;bits/stdc++.h&gt; #define inf 0x3f3f3f3f using namespace std; int ...

xiaohui_zhou的博客 497

hdu1180BFS

题目链接 诡异楼梯 5 5 **..T **.*. ..|.. .*.*. S.... 如图所示的地图,|代表楼梯,每分钟移动一方向,只能顺着楼梯的方向,每可以在 . 或S或T处停留,求从S到T的最小步数 没有什么难度,在楼梯的地方模拟清楚就行,把方向的各个情况弄清楚 记录时间差,判断到达楼梯时的方向, 当是|的时候,只能沿着上下方向, 当是—时只能沿着

pmt123456的博客 867

HDU 1180.诡异楼梯

诡异楼梯 Time Limit:1000MSMemory Limit:65536KB64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 1180 Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟...

weixin_30917213的博客 101

hdu诡异楼梯(BFS+优先队列)

http://acm.hdu.edu.cn/showproblem.php?pid=1180 这题交了7 悲剧了 前几 因为把+行想成是左右了 一直WA 后来看出来了 又把过的楼梯给标记了 这里的楼梯不能标记 因为可以在原地等着楼梯转变 加的时间有可能是2 这样普通队列满足不了最少的先搜 就用优先队列了 View Code 1 #include<stdio.h&gt...

weixin_30666753的博客 110

期望值Markov过程(马尔科夫过程),hdu1204糖果大战

先来看一个例子,即赌徒输光问题: 赌徒甲有资本a元,赌徒乙有资本b元,两人进行赌博,每赌一局输者给赢者1元,没有和局,直赌至两人中有一人输光为止。设在每一局中,甲获胜的概率为p,乙获胜的概率为q=1-p,求甲先输光的概率。  解:先设c=a+b;  r=q/p; 这个实际上是Markov过程(马尔科夫过程),具体细节不说了,结果就是: 出自: 

Last Order 3806

hdu2204Eddy's爱好

hdu2204Eddy's爱好的解题思路,以及一些需要注意的地方,比如读入的方式之类的,欢迎讨论

Last Order 1723

hdu5071-Chat

现场赛的时候也是被坑了,还以为会精细设计一组牛逼的数据卡时间,还有题目里没说是否聊天字数清零的问题,也是坑, 第一区域赛,感觉就是题目也没什么特别难的,有时题意也没说清楚,我想旁边的北航那个队应该是跟我想的一样,然后被坑了吧,他们一直没 过这题,不然会是第二?反正跟我没关系 直接模拟,也不用考虑超时,数据是随机的. 需要注意的是,如果关掉一个之后又打开

Last Order 1654

hdu 5031 Lines 爆搜

其实嘞,这个线可以只延伸一端 然后嘞,爆搜一就可以 最后嘞,600-800ms过 本弱就是弱啊,你来打我呀…… #include #include #include #include using namespace std; int a[100][100]; int n,m,ans; bool dfs(int step) { int i,j,t,ii,jj,x,y,cnt,tx

Last Order 1493

hdu2586How far away ?

用tarjan解hdu2586,稍微谈了这个算法的实现,欢迎讨论

Last Order 1397

hdu3790最短路径问题

链式向前星+spfa解hdu3790的结题报告,解释了链式向前星的原理,欢迎讨论

Last Order 1365

hdu1104 Remainder bfs找算式是否有解……

hdu1104 Remainder bfs找算式是否有解……

Last Order 1305

hdu4865Peter's Hobby马尔科夫过程

hdu4865Peter's Hobby马尔科夫过程,欢迎讨论

Last Order 1275

hdu2222Keywords Search字典树入门……

hdu2222Keywords Search字典树入门……

Last Order 1273

爆搜解hdu1572下沙小面的(2)

爆搜解hdu1572下沙小面的(2),欢迎讨论

Last Order 1164

hdu1016Prime Ring Problem

爆搜解hdu1016Prime Ring Problem,欢迎讨论

Last Order 1154

hdu3986Harry Potter and the Final Battle

spfa和链式向前星解hdu3986的删掉最短路任意一条边的最坏结果问题,欢迎讨论

Last Order 1108
上一篇: poj2533Longest_Ordered_Subsequence
下一篇: hdu1104 Remainder bfs找算式是否有解……
Last0rder
博客等级 码龄18年 50粉丝 325原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值