题意:就是选两个点出发,只能走草坪,看能不能走完所有的草坪

分析:由于数据范围很小,所有枚举这两个点,事先将所有的草坪点存起来,然后任选两个点走,(两个点可以是同一个点)

然后BFS就行了

注:无解的情况很好做,事先深搜判连通块的个数就好,大于2就无解(代码比较烂)

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#include<stdlib.h>
#include<string>
#include<set>
using namespace std;
typedef long long LL;
const int maxn=;
const int INF=0x3f3f3f3f;
int n,m;
struct Point
{
int x,y;
} o,t,a[];
int mp[maxn][maxn],p,h;
int bel[maxn][maxn];
char s[maxn][maxn];
int dx[]= {,,-,};
int dy[]= {-,,,};
void dfs(int x,int y)
{
bel[x][y]=p;
for(int i=; i<; ++i)
{
int e=x+dx[i];
int r=y+dy[i];
if(e<||e>n||r<||r>m)continue;
if(s[e][r]=='.'||bel[e][r])continue;
dfs(e,r);
}
}
queue<Point>q;
int bfs()
{
int ans=;
h=q.size();
while(!q.empty())
{
o=q.front();
q.pop();
for(int i=; i<; ++i)
{
t.x=o.x+dx[i];
t.y=o.y+dy[i];
if(t.x<||t.x>n||t.y<||t.y>m)continue;
if(s[t.x][t.y]=='.'||mp[t.x][t.y]!=-)continue;
mp[t.x][t.y]=mp[o.x][o.y]+;
ans=max(ans,mp[t.x][t.y]);
h++;
q.push(t);
}
}
return ans;
}
int main()
{
int T,cas=;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(bel,,sizeof(bel));
p=;
for(int i=; i<=n; ++i)
scanf("%s",s[i]+);
int cnt=,ans=INF;
for(int i=; i<=n; ++i)
for(int j=; j<=m; ++j)
if(s[i][j]=='#')
{
if(!bel[i][j])++p,dfs(i,j);
a[cnt].x=i,a[cnt++].y=j;
}
printf("Case %d: ",++cas);
if(p>)
{
printf("-1\n");
continue;
}
bool flag=;
for(int i=; i<cnt; ++i)
{
for(int j=; j<cnt; ++j)
{
if(p==&&bel[a[i].x][a[i].y]==bel[a[j].x][a[j].y])
continue;
h=;
memset(mp,-,sizeof(mp));
mp[a[i].x][a[i].y]=mp[a[j].x][a[j].y]=;
q.push(a[i]);
if(i!=j)q.push(a[j]);
int res=bfs();
if(h==cnt)ans=min(ans,res);
}
}
printf("%d\n",ans);
}
return ;
}

FZU2150 Fire Game BFS搜索的更多相关文章

  1. FZU2150 Fire Game —— BFS

    题目链接:https://vjudge.net/problem/FZU-2150 Problem 2150 Fire Game Accept: 2702    Submit: 9240 Time Li ...

  2. hdu 1240:Asteroids!(三维BFS搜索)

    Asteroids! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  3. hiho_1139_二分+bfs搜索

    题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分     最小化最大值,考虑采用二分搜索.对所有的边长进 ...

  4. hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. BFS搜索

    参考博客:[算法入门]广度/宽度优先搜索(BFS) 适用问题:一个解/最优解 重点:我们怎么运用队列?怎么记录路径? 假设我们要找寻一条从V0到V6的最短路径.(明显看出这条最短路径就是V0-> ...

  6. UVA 11624 - Fire! 图BFS

    看题传送门 昨天晚上UVA上不去今天晚上才上得去,这是在维护么? 然后去看了JAVA,感觉还不错昂~ 晚上上去UVA后经常连接失败作死啊. 第一次做图的题~ 基本是照着抄的T T 不过搞懂了图的BFS ...

  7. Horse Pro(带负坐标的bfs搜索)

    Horse Pro bfs搜索,但图中存在负值坐标,两种方法解决. 用数组标记,将原点设为300,300 用map标记 http://oj.jxust.edu.cn/contest/Problem?i ...

  8. 天梯赛练习 L3-008 喊山 (30分) bfs搜索

    题目分析: 本题是一题比较简单的bfs搜索题,首先由于数据给的比较多不能直接开二维数组存放,而是用了vector的动态的二维数组的形式存放,对于每个出发点,我们bfs向四周搜索,标记搜索过的点,遇到搜 ...

  9. [宽度优先搜索] FZU-2150 Fire Game

    Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns) ...

随机推荐

  1. linux 历史命令用法(转)

    许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...

  2. Qt单元测试

    单元测试之作用要完成测试用例,保证设计上的耦合依赖通过测试用例,保证覆盖率,提高程序质量 QTest一些有用的静态函数QTest::qExecQTest::qSleepQTest::qWait   例 ...

  3. Netty4.x中文教程系列(二) – 白话概念

    "Hello World"的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什.方便自己以后更灵活的使用和扩展.   声明, ...

  4. C#跳出循环的几种方法的区别

    break是循环结束执行,执行循环体后面的代码. continue是跳过本次循环未执行的代码,继续执行下一次循环. goto是跳到指定的指令去,你指哪,他跳到哪. return是函数返回,如果循环在M ...

  5. C++11 FAQ中文版--转

    更新至英文版October 3, 2012 译者前言: 经过C++标准委员会的不懈努力,最新的ISO C++标准C++11,也即是原来的C++0x,已经正式发布了.让我们欢迎C++11! 今天获得St ...

  6. STL,ATL,WTL之间的联系和区别

    STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R M ...

  7. 1990-D. 幻方

    描述 河图,黑点白点排列奥秘数阵:洛书,纵横斜三条线上数和皆15.这是一个古老的数字游戏,将1~9填入一个九宫格,使得每行.每列.对角线上数字的和都相同(为15).在西方,满足类似规律的矩阵称之为幻方 ...

  8. android 多个listView的向下滚动设置 listView动态设置高度代码

    墨迹天气图: 这里都是用的android里面的shape实现的,实现起来比较简单,只是在滚动的时候有点小麻烦... 当我们多个ListView超出了它的父控件LinearLayout的时候,它们每个L ...

  9. Eclipse 安装FindBugs插件

    FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具.FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析.FindBug ...

  10. codeforces #313 div1 D

    好神的题目! 首先我们运用pick定理A=S-B/2+1将要求的东西转化掉 之后分离变量,我们变成了求选取凸包面积的期望和求选取凸包在边界上的点的期望 我们先考虑求选取凸包面积的期望 如何计算凸多边形 ...