#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
//暴力+双向bfs
const int MAXN = 20;
const int INF = 0x3f3f3f3f;
char maze[MAXN][MAXN];
int dist[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int t, n, m, k;
struct _Node{
int x, y, time;
_Node(){
}
_Node(int _x, int _y, int _time){
x = _x; y = _y; time = _time;
}
}tmp[110];
int visit[MAXN][MAXN];
void INIT()
{
for(int i = 0; i < MAXN; ++i)
for(int j = 0; j < MAXN; ++j) maze[i][j] = '.';
}
bool isOk()
{
int x,y;
for(int i=0;i< k;i++)
{
x = tmp[i].x; y = tmp[i].y;
if(!visit[x][y])
return 0;
}
return 1;
}
int bfs(_Node n1, _Node n2)
{
memset(visit, 0, sizeof(visit));
queue<_Node> q1;
queue<_Node> q2;
q1.push(n1);
q2.push(n2);
visit[n1.x][n1.y] = 1; visit[n2.x][n2.y] = 1;
int ans = 0;
while(!q1.empty() || !q2.empty()) {
_Node t1, t2;
if(!q1.empty()) t1 = q1.front(), q1.pop();
if(!q2.empty()) t2 = q2.front(), q2.pop();
if(isOk()) return ans;
for(int i = 0; i < 4; ++i)
{
int dx1 = t1.x + dist[i][0], dy1 = t1.y + dist[i][1];
int dx2 = t2.x + dist[i][0], dy2 = t2.y + dist[i][1];
if(maze[dx1][dy1] == '#' && !visit[dx1][dy1])
{
q1.push(_Node(dx1, dy1, t1.time + 1));
ans = max(ans, t1.time + 1);
visit[dx1][dy1] = 1;
}
if(maze[dx2][dy2] == '#' && !visit[dx2][dy2])
{
q1.push(_Node(dx2, dy2, t2.time + 1));
ans = max(ans, t2.time + 1);
visit[dx2][dy2] = 1;
}
}
}
return INF;
}
int main()
{
scanf("%d", &t);
for(int cnt = 1; cnt <= t; ++cnt)
{
INIT();
scanf("%d%d", &n, &m);
int x = 0;
getchar();
k = 0;
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= m; ++j)
{
scanf("%c", &maze[i][j]);
if(maze[i][j] == '#')
{
tmp[k].x = i;
tmp[k].y = j;
tmp[k++].time = 0;
}
}
getchar();
}
int ans = INF;
for(int i = 0; i < k; i++)
{
for(int j = i; j < k; j++)
{
ans=min(bfs(tmp[i] ,tmp[j]),ans);
}
}
printf("Case %d: %d\n", cnt, ans == INF ? -1 : ans);
}
return 0;
}
FZU-215 (Fire Game)
原创
©著作权归作者所有:来自51CTO博客作者qq5813099298a32的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:Uva-11624 (fire)
下一篇:POJ-3414c(Pots)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
FZU 2150 Fire Game (暴力BFS)
【题目链接】click here~~【题目大意】:两个熊孩子要把一个正方形上的草都给烧掉,
BFS FZU #include #define ios -
Fire Game FZU - 2150 (水搜索)
其实写一个spfa就行 遍历所有的草的点 组合两个 求最大时间的最小
#define #include i++ ios IT