#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cstdio>
#include<queue>
using namespace std;
#define inf 0x3f3f3f
struct Point
{
int x;
int y;
};
int n, m;
char map[15][15];
int dis[15][15];
queue<Point>que;
int dirx[4] = { 1, -1, 0, 0 };
int diry[4] = { 0, 0, -1, 1 };
int bfs(int x1, int y1, int x2, int y2)
{
int xx, yy;
Point p1, p2, cur, nex;
memset(dis, inf, sizeof(dis));
p1.x = x1; p1.y = y1;
p2.x = x2; p2.y = y2;
dis[x1][y1] = 0;
dis[x2][y2] = 0;
que.push(p1);
que.push(p2);
while (!que.empty())
{
cur = que.front();
que.pop();
for (int i = 0; i<4; i++)
{
xx = cur.x + dirx[i];
yy = cur.y + diry[i];
if (xx >= 0 && xx<n&&yy>=0 && yy<m&&map[xx][yy] == '#'&&dis[xx][yy]>dis[cur.x][cur.y] + 1)
{
dis[xx][yy] = dis[cur.x][cur.y] + 1;
nex.x = xx;
nex.y = yy;
que.push(nex);
}
}
}
int maxx = 0;
for (int i = 0; i < n;i++)
for (int j = 0 ; j < m; j++)
if (map[i][j] == '#')
{
maxx = max(maxx, dis[i][j]);
}
return maxx;
}
int main()
{
int casen;
cin >> casen;
for (int cas = 1; cas <= casen; cas++)
{
while (!que.empty())
que.pop();
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> map[i];
int temp;
int ans = inf;
for (int i = 0; i < n;i++)
for (int j = 0; j < m;j++)
if (map[i][j] == '#')
for (int ii = 0; ii < n;ii++)
for (int jj = 0; jj < m;jj++)
if (map[ii][jj] == '#')
{
temp = bfs(i, j, ii, jj);
ans = min(ans, temp);
}
if (ans == inf) ans = -1;
cout << "Case " << cas << ": " << ans << endl;
}
}
fzu2150
最新推荐文章于 2021-04-14 18:13:01 发布