勇敢的法里奧出色的完成了任務之後,正在迅速地向自己的基地撤退。但由於後面有著一大群追兵,所以法里奧要盡快地返回基地,否則就會被敵人逮住。
終於,法里奧來到了最後的一站:泰拉希爾原野,穿過這裡就可以回到基地了。然而,敵人依然緊追不捨。不過,泰拉希爾的地理條件對法里奧十分有利,眾多的湖泊隨處分布。敵人需要繞道而行,但法里奧還是決定找一條能盡快回到基地的路。
假設泰拉希爾原野是乙個m*n的矩陣,它有兩種地形,p表示平,l表示湖泊,法里奧只能停留在平地上。他目前的位置在左上角(1,1)處,而目的地為右下角的(m,n)。法里奧可以向前後左右4個方向移動或飛行,每移動1格需要1單位時間。而飛行的時間主要花費在變形上,飛行本身時間消耗很短,所以無論一次飛行多遠的距離,都只需要1單位時間。飛行的途中不能變向,並且一次飛行最終必須要降落到平地上。當然,由於受到能量的限制,法里奧不能無限制飛行,他總共最多可以飛行的距離為d。在知道了以上的資訊之後,請你幫助法里奧計算一下,他最快到達基地所需要的時間。
第一行是3個整數,m(1≤m≤100),n(1≤n≤100),d(1≤d≤100)。表示原野是m*n的矩陣,法里奧最多只能飛行距離為d。接下來的m行每行有n個字元,相互之間沒有空格。p表示當前位置是平地,l則表示湖泊。假定(1,1)和(m,n)一定是平地。
乙個整數,表示法里奧到達基地需要的最短時間。如果無法到達基地,則輸出impossible。
442
pllp
pplp
pppp
pllp
5
節點記錄狀態,那都需要儲存什麼資訊呢?記錄當前的x,y座標,所用時間,剩餘的可飛行距離。
判重和一般的bfs不同,開乙個三維的陣列bool inq[105][105][105];
記錄走過的路徑,因為需要額外的維度來記錄剩餘的飛行能力。因為,同樣是到達乙個點,不同的飛行剩餘距離,所得答案有可能不同。
利用bfs進行搜尋,和一般的bfs不同的是,每乙個結點擴充套件出來的孩子結點既有行走的,也有飛行的。所以,既需要列舉4個方向走一步的情況,也需要列舉朝4個方向飛行2格、3格···一直到最大剩餘飛行距離。
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int mod =
10000007
;const
int inf =
0x3f3f3f3f
;const
double pi =
acos(-
1.0)
;const
int maxn =
300;
int n,m,d;
char a[
105]
[105];
bool inq[
105]
[105][
105]
;int x[4]
=;int y[4]
=;struct node start, top, tmp;
bool
judge
(int x,
int y,
int dis)
intbfs()
}for
(int j =
2; j <= top.dis; j++
)//向四個方向飛行j格,兩格、三格……最大直到剩餘可飛行的距離}}
}return-1
;}intmain()
1124 矩陣加法
時間限制 1000 ms 記憶體限制 65536 kb 提交數 7242 通過數 4800 輸入兩個n行m列的矩陣a和b,輸出它們的和a b。第一行包含兩個整數n和m,表示矩陣的行數和列數 1 n 100,1 m 100 接下來n行,每行m個整數,表示矩陣a的元素。接下來n行,每行m個整數,表示矩陣...
1124 矩陣加法
時間限制 1000 ms 記憶體限制 65536 kb 題目描述 輸入兩個n行m列的矩陣a和b,輸出它們的和a b。輸入 第一行包含兩個整數n和m,表示矩陣的行數和列數 1 n 100,1 m 100 接下來n行,每行m個整數,表示矩陣a的元素。接下來n行,每行m個整數,表示矩陣b的元素。相鄰兩個整...
1124 矩陣加法
輸入兩個n行m列的矩陣a和b,輸出它們的和a b。第一行包含兩個整數n和m,表示矩陣的行數和列數 1 n 100,1 m 100 接下來n行,每行m個整數,表示矩陣a的元素。接下來n行,每行m個整數,表示矩陣b的元素。相鄰兩個整數之間用單個空格隔開,每個元素均在1 1000之間。n行,每行m個整數,...