Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草。可惜天不从人愿,他在植物大战人类中败下阵来。邪恶的乳草已经在他的农场的西北部份佔领了一片立足之地。
草地像往常一样,被分割成一个高度為Y(1 <= y <= 100), 宽度為X(1 <= x <= 100)的直角网格。(1,1)是左下角的格(也就是说坐标排布跟一般的X,Y坐标相同)。乳草一开始佔领了格(Mx,My)。每个星期,乳草传播到已被乳草佔领的格子四面八方的每一个没有很多石头的格(包括垂直与水平相邻的和对角线上相邻的格)。1周之后,这些新佔领的格又可以把乳草传播到更多的格裡面了。
Bessie想要在草地被乳草完全佔领之前尽可能的享用所有的牧草。她很好奇到底乳草要多久才能佔领整个草地。如果乳草在0时刻处於格(Mx,My),那麼还在那个时刻它们可以完全佔领入侵整片草地呢(对给定的数据总是会发生)?
草地由一个图片表示。".“表示草,而”*"表示大石。比如这个X=4, Y=3的例子。
第0周
.....
..*.
M**.
第1周
....
MM*.
M**.
第2周
MMM.
MM*M
M**.
第3周
MMMM
MM*M
M**.
第4周
MMMM
MM*M
M**M
乳草会在 4 星期后占领整片土地。
样例输入:
4 3 1 1
....
..*.
.**.
样例输出:
4
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
struct node{
int x, y;
node(){}
node(int _x, int _y)
{
x = _x;
y = _y;
}
};
int n, m, u, v;
char mp[110][110];
int vis[110][110];
int dx[] = {1, -1, 0, 0, -1, 1, -1, 1};//8个方向
int dy[] = {0, 0, 1, -1, 1, 1, -1, -1};
int bfs()
{
vis[u][v] = 1;//标记访问
queue<node> q;
q.push(node(u, v));
int ma = -1;
while (!q.empty())
{
u = q.front().x;
v = q.front().y;
q.pop();
for (int i = 0; i < 8; i++)
{
int x = u + dx[i];
int y = v + dy[i];
if (x >= 1 && x <= n && y >= 1 && y <= m && mp[x][y] == '.' && !vis[x][y])
{
q.push(node(x, y));
vis[x][y] = vis[u][v] + 1;
ma = vis[x][y];//记录时间
}
}
}
return ma - 1;
}
int main()
{
cin >> m >> n >> v >> u;
u = n - u + 1;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> mp[i][j];//输入
}
}
cout << bfs() << endl;
return 0;
}