1. 程式人生 > 其它 >I’m stuck!

I’m stuck!

引子

一道搜尋題。

首先,每次檢索到一個點,BFS兩輪,TLE35分

其次,記錄一下從S->當前點,(BFS一輪),TLE55分

但是,正解只需要兩次BFS

題目描述

給定一個R行C列的地圖,地圖的每一個方格可能是#,+,-,|,.,S,T七個字元中的一個,分別表示如下意思:

#: 任何時候玩家都不能移動到此方格;

+: 當玩家到達這一方格後,下一步可以向上下左右四個方向相鄰的任意一個非#方格移動一格;

-: 當玩家到達這一方格後,下一步可以向左右兩個方向相鄰的一個非#方格移動一格;

|: 當玩家到達這一方格後,下一步可以向上下兩個方向相鄰的一個非#方格移動一格;

.: 當玩家到達這一方格後,下一步只能向下移動一格。如果下面相鄰的方格為#,則玩家不能再移動;

S: 玩家的初始位置,地圖中只會有一個初始位置。玩家到達這一方格後,下一步可以向上下左右四個方向相鄰的任意一個非#方格移動一格;

T: 玩家的目標位置,地圖中只會有一個目標位置。玩家到達這一方格後,可以選擇完成任務,也可以選擇不完成任務繼續移動。如果繼續移動下一步可以向上下左右四個方向相鄰的任意一個非#方格移動一格。

此外,玩家不能移動出地圖。

請找出滿足下面兩個性質的方格個數:

1.玩家可以從初始位置移動到此方格; 2.玩家不可以從此方格移動到目標位置。

輸入格式

輸入的第一行包括兩個整數R和C,分別表示地圖的行和列數。

接下來的R行每行都包含C個字元。它們表示地圖的格子。地圖上恰好有一個S和一個T。

輸出格式

如果玩家在初始位置就已經不能到達終點了,就輸出I'm stuck!。

否則的話,輸出滿足性質的方格的個數。

樣例

樣例輸入

5 5
--+-+
..|#.
..|##
S-+-T
####.

樣例輸出

2

樣例解釋

如果把滿足性質的方格在地圖上用 X 標記出來的話,地圖如下所示:

--+-+
..|#X
..|##
S-+-T
####X

資料範圍與提示

1≤R,C≤50

題解見連結:https://www.cnblogs.com/hyf200803050946/p/14882614.html