HDU1180 詭異的樓梯(bfs 優先佇列)

2021-09-08 17:20:17 字數 2718 閱讀 1638

problem description

hogwarts正式開學以後,harry發現在hogwarts裡,某些樓梯並不是靜止不動的,相反,他們每隔一分鐘就變動一次方向.

input

測試資料有多組,每組的表述如下:

第一行有兩個數,m和n,接下來是乙個m行n列的地圖,'*'表示障礙物,'.'表示走廊,'|'或者'-'表示乙個樓梯,並且標明了它在一開始時所處的位置:'|'表示的樓梯在最開始是豎直方向,'-'表示的樓梯在一開始是水平方向.地圖中還有乙個's'是起點,'t'是目標,0<=m,n<=20,地圖中不會出現兩個相連的梯子.harry每秒只能停留在'.'或's'和't'所標記的格仔內.

output

只有一行,包含乙個數t,表示到達目標的最短時間.

sample input

5 5 **..t **.*. ..|.. .*.*. s....

sample output 7

hint

hint

地圖如下:

題目解析:

一遍就a了,我也不知道注意什麼。我寫的有點長,但容易懂。

#include #include 

#include

#include

#include

using

namespace

std;

char map[30][30

];int v[30][30

];int

n,m;

struct

node

};struct

node t,f;

void bfs(int xx,int

yy)

for(int i=0; i<4; i++)

else

if(map[f.x][f.y]=='|'

)

else

if(t.ans%2==1&&map[f.x+1][f.y]!='

*'&&v[f.x+1][f.y]==0

)

}else

if(map[f.x][f.y]=='-'

)

else

if(t.ans%2==0&&map[f.x+1][f.y]!='

*'&&v[f.x+1][f.y]==0

) }}

}else

if(i==1

)

else

if(map[f.x][f.y]=='|'

)

else

if(t.ans%2==1&&map[f.x-1][f.y]!='

*'&&v[f.x-1][f.y]==0

)

}else

if(map[f.x][f.y]=='-'

)

else

if(t.ans%2==0&&map[f.x-1][f.y]!='

*'&&v[f.x-1][f.y]==0

) }}

}else

if(i==2

)

else

if(map[f.x][f.y]=='-'

)

else

if(t.ans%2==1&&map[f.x][f.y+1]!='

*'&&v[f.x][f.y+1]==0

)

}else

if(map[f.x][f.y]=='|'

)

else

if(t.ans%2==0&&map[f.x][f.y+1]!='

*'&&v[f.x][f.y+1]==0

) }}

}else

if(i==3

)

else

if(map[f.x][f.y]=='-'

)

else

if(t.ans%2==1&&map[f.x][f.y-1]!='

*'&&v[f.x][f.y-1]==0

)

}else

if(map[f.x][f.y]=='|'

)

else

if(t.ans%2==0&&map[f.x][f.y-1]!='

*'&&v[f.x][f.y-1]==0

) }}

}}}return;}

intmain()

for(int i=0; i)

}if(j!=m) break

; }

}return0;

}

hdu 1180 詭異的樓梯(bfs)

小記 阿西吧!我就因為乙個dir方向搞錯了,寫的是從左往右是上下左右,用的時候是按上左下右。思路 bfs,首先我們假設沒有樓梯的情況,那麼問題就簡單很多了,bfs隨手可以打出來。打完後再繼續 我們現在要新增可變的樓梯上去。樓梯有個初始狀態,然後有個到達樓梯旁邊時的樓梯的狀態,而這個狀態時和你到達樓梯...

hdu1180詭異的樓梯(bfs)

這道題的意思是哈利波特要從s走到t,中間有那種會改變方向的樓梯,經過樓梯的話一共只用一秒,但是可能會存在有特殊的樓梯會一秒改變一次方向,也就是說可能會等一秒,不會有兩個樓梯連續挨著,還有很重要的一點就是,你不能再樓梯上呆一秒,所以當你找到樓梯的時候,不能把他直接壓進佇列,要直接對它進行處理,然後把處...

HDU1180 詭異的樓梯 BFS

problem description hogwarts正式開學以後,harry發現在hogwarts裡,某些樓梯並不是靜止不動的,相反,他們每隔一分鐘就變動一次方向.比如下面的例子裡,一開始樓梯在豎直方向,一分鐘以後它移動到了水平方向,再過一分鐘它又回到了豎直方向.harry發現對他來說很難找到能...