hdu1180奇怪的楼梯……bfs迷阵……wa该16二级,我太渣滓

#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();
	}
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-10-10 05:30:05

hdu1180奇怪的楼梯……bfs迷阵……wa该16二级,我太渣滓的相关文章

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

#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=

HDU1180:诡异的楼梯(bfs+优先队列)

http://acm.hdu.edu.cn/showproblem.php?pid=1180 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖直方向,一分钟以后它移动到了水平方向,再过一分钟它又回到了竖直方向.Harry发现对他来说很难找到能使得他最快到达目的地的路线,这时Ron(Harry最好的朋友)告诉Harry正好有一个魔法道具可以帮助他

hdu1180诡异的楼梯

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 10678    Accepted Submission(s): 2662 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在

hdu - 1180 诡异的楼梯 (bfs+优先队列)

http://acm.hdu.edu.cn/showproblem.php?pid=1180 注意点就是楼梯是在harry移动完之后才会改变方向,那么只要统计到达这个点时间奇偶性,就可以知道当前楼梯是水平的还是垂直的. 并且我们需要知道当前到达楼梯这个点的方向,这样才知道下一个往哪个方向走,可以根据dir数组来判断方向. 楼梯不用判重. #include<stdio.h> #include<string.h> #include<queue> #include<io

hdu 1180 诡异的楼梯 (bfs)

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 9360    Accepted Submission(s): 2309 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖

hdu 1180诡异的楼梯(bfs)

诡异的楼梯 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Submission(s) : 49   Accepted Submission(s) : 20 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Hogwarts正式开学以后,Harry发现在Hogwart

hdu 1180 诡异的楼梯 BFS 这题相当坑爹啊,需要注意几点

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 9813    Accepted Submission(s): 2428 Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖

HDU1180 诡异的楼梯 广搜 优先队列

Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖直方向,一分钟以后它移动到了水平方向,再过一分钟它又回到了竖直方向.Harry发现对他来说很难找到能使得他最快到达目的地的路线,这时Ron(Harry最好的朋友)告诉Harry正好有一个魔法道具可以帮助他寻找这样的路线,而那个魔法道具上的咒语,正是由你纂写的. Input 测试数据有多组,每组的表

杭电acm 1180 诡异的楼梯 BFS

诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 19334    Accepted Submission(s): 5048Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在竖直