給定一個 R×CR×C 的方格矩陣。
矩陣左上角方格座標為 (0,0)(0,0),右下角方格座標為 (R−1,C−1)(R−1,C−1)。
每個方格中要麼有南瓜,要麼有乾草。
南瓜分為大、中、小三種。
初始時,一個農民位於方格 (A,B)(A,B)。
他可以朝上下左右四個方向自由移動,但是他不能走出矩陣,也不能走進有乾草的方格。
他每走進一個方格就可以將方格內的南瓜收走。
每個小南瓜價值 11 元,每個中南瓜價值 55 元,每個大南瓜價值 1010 元。
請你計算,他可以收穫的全部南瓜的總價值。
保證農名的初始位置有南瓜。
輸入格式
第一行包含整數 RR。
第二行包含整數 CC。
接下來 RR 行,每行 CC 個字元,表示方格矩陣的具體分佈。其中,大南瓜用 L
表示,中南瓜用 M
表示,小南瓜用 S
表示,乾草用 *
。
再一行包含整數 AA。
最後一行包含整數 BB。
輸出格式
一個整數,表示可以收穫的全部南瓜的總價值。
資料範圍
1≤R×C≤1051≤R×C≤105,
0≤A<R0≤A<R,
0≤B<C0≤B<C
輸入樣例1:
6
6
**LMLS
S*LMMS
S*SMSM
******
LLM*MS
SSL*SS
5
1
輸出樣例1:
37
樣例1解釋
矩陣的具體分佈圖如下所示,農民的可活動範圍為黃色區域。
農民一共可以收穫 22 個小南瓜,11 箇中南瓜,33 個大南瓜,總價值為 2×1+1×5+3×10=372×1+1×5+3×10=37。
輸入樣例2:
6
6
**LMLS
S*LMMS
S*SMSM
***SLL
LLM*MS
SSL*SS
2
4
輸出樣例2:
88
樣例2解釋
矩陣的具體分佈圖如下所示,農民的可活動範圍為黃色區域。
農民一共可以收穫 88 個小南瓜,66 箇中南瓜,55 個大南瓜,總價值為 8×1+6×5+5×10=888×1+6×5+5×10=88。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int n, m;
vector<string> g;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int get_score(char c)
{
if (c == 'S') return 1;
if (c == 'M') return 5;
return 10;
}
int dfs(int x, int y)
{
int res = get_score(g[x][y]);
g[x][y] = '*';
for (int i = 0; i < 4; i ++ )
{
int a = x + dx[i], b = y + dy[i];
if (a < 0 || a >= n || b < 0 || b >= m || g[a][b] == '*') continue;
res += dfs(a, b);
}
return res;
}
int main()
{
cin >> n >> m;
g.resize(n);//表示將vector的大小調整為n
for (int i = 0; i < n; i ++ ) cin >> g[i];
int x, y;
cin >> x >> y;
cout << dfs(x, y) << endl;
return 0;
}