hihocoder 1519 逃離迷宮II

2021-08-06 02:54:51 字數 1219 閱讀 4987

時間限制:

10000ms

單點時限:

1000ms

記憶體限制:

256mb

小hi被壞女巫抓進裡一間有n x m個格仔組成的矩陣迷宮。

有些格仔是小hi可以經過的,我們用'.'表示;有些格仔上有障礙物小hi不能經過,我們用'#'表示。小hi的起始位置用's'表示,他需要到達用't'表示的格仔才能逃離迷宮。

麻煩的是小hi被壞女巫施了魔法,他只能選擇上下左右某乙個方向,沿著這個方向一直走,直到遇到障礙物或者迷宮邊界才能改變方向。新的方向可以是上下左右四個方向之一。之後他還是只能沿著新的方向一直走直到再次遇到障礙物或者迷宮邊界……  

小hi想知道他最少改變幾次方向才能逃離這個迷宮。

第一行包含兩個整數n和m。  (1 <= n, m <= 500)  

以下n行每行m個字元,代表迷宮。

乙個整數代表答案。如果小hi沒法逃離迷宮,輸出-1。

樣例輸入

5 5

s.#.t

.....

.....

.....

.....

樣例輸出

2

思路:bfs。往當前方向一直走,直到遇到邊界或者障礙物,然後再轉彎,如此重複下去。

#include#include#includeusing namespace std;

int n,m,a[501][501];

int v[501][501];

char s[501][501];

int d[4][2]=;

void lenka(int nx,int ny)

{ queuep;

p.push(nx);

p.push(ny);

v[nx][ny]=1;

while(!p.empty())

{ nx=p.front();p.pop();

ny=p.front();p.pop();

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

{ int x=nx+d[i][0];

int y=ny+d[i][1];

if(x>=0&&x=0&&y=0&&x+d[i][0]=0&&y+d[i][1]>n>>m)

{ memset(v,0,sizeof v);

memset(a,0,sizeof a);

for(int i=0;i

演算法導論15 1

動態規劃 dynamic programming 描述了它區別與其他演算法的最大特徵 其中 programming 表示的是一種 法,在動態規劃演算法執行的過程中,會動態地去將子問題的解填入 和讀取已知子問題的解,以減少不必要的運算 相同點 都是通過組合子問題的解來求解原問題 不同點 動態規劃子問題...

1 5 1 泛型總覽

泛型是.net 中重要的一部分。那麼接下來將從一下幾個方面來介紹泛型 1 效能 2 型別安全 3 二進位制 的重用 4 膨脹 5 命名手冊 首先回顧一下值型別和引用型別 值型別是存在棧中的,引用型別是存在堆中的,c 類為引用型別,結構體為值型別。對於.net來說,值型別轉化為引用型別是很容易的。舉個...

Hihocoder 數列問題

給定乙個長度為n數列a a1,a2,an a 1,a 2,a n a1 a2 an 由於某種原因,小ho對這個數列有些不滿意。他希望每個在數列 現的數值,其出現的次數都是唯一的。假設a 1,1,2,2 1和2都出現了2次,小ho就會不滿意。於是小ho決定從a中刪除一些數,使得每個數值出現次數都是唯一...