http://acm.fzu.edu.cn/problem.php?pid=2150

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=65959#problem/I

题意: 从两个任意点点着草地 火会向上下左右四个方向蔓延

相邻的草地就会被点着

问最短多长时间点燃所有草地

思路:其实就是枚举两个点同时进队列进行bfs

其中要注意 草地小于等于二时 要特殊处理

#include<iostream>
#include<stdio.h>
#include<string.h>
#define INF 0xfffffff
#include<queue>
#include<algorithm>
using namespace std;
#define N 15 int vis[N][N],n,m,counts,mark[N][N][N][N],Mark,sum;
int dir[][]={ {,},{-,},{,-},{,} };
char maps[N][N]; struct node
{
int x,y,step;
}; void bfs(node s1,node s2)
{
queue<node>Q;
node p,q;
s1.step=s2.step=;
sum=;
memset(vis,,sizeof(vis));
Q.push(s1);
Q.push(s2);
vis[s1.x][s1.y]=vis[s2.x][s2.y]=;
while(!Q.empty())
{
q=Q.front();
Q.pop();
for(int i=;i<;i++)
{
p.x=q.x+dir[i][];
p.y=q.y+dir[i][];
if(p.x<n&&p.x>=&&p.y>=&&p.y<m&&vis[p.x][p.y]==&&maps[p.x][p.y]=='#')
{
p.step=q.step+;
vis[p.x][p.y]=;
Q.push(p);
Mark++;// 已经燃烧的地方个数;
}
}
sum=max(sum,q.step);
}
} int main()
{
int T,i,j,ans,t=;
node s1,s2;
scanf("%d",&T);
while(T--)
{
t++;
memset(mark,,sizeof(mark));
scanf("%d%d",&n,&m);
counts=sum=;
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
cin>>maps[i][j];
if(maps[i][j]=='#')
counts++;
}
}
printf("Case %d: ",t);
if(counts<=)//如果只有两块一下的草地,为0;
{
printf("0\n");continue;
}
ans=INF;
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
if(maps[i][j]=='#')//第一个点为‘#’;
{
for(int ii=;ii<n;ii++)
{
for(int jj=;jj<m;jj++)
{
if(maps[ii][jj]=='#'&&(ii!=i||jj!=j)&&mark[i][j][ii][jj]==)//要满足两点不同并且没有被同时当做起点;
{
mark[ii][jj][i][j]=mark[i][j][ii][jj]=;//标记说明这两个点被当过起点;
s1.x=i,s1.y=j;
s2.x=ii,s2.y=jj;
s1.step=s2.step=;
Mark=;//刚开始的两个起点被烧过了;
bfs(s1,s2);
if(ans>sum&&Mark==counts/*看是否把所有草地都燃烧完了;*/)
ans=sum;
}
}
}
}
}
}
if(ans==INF)
printf("-1\n");
else
printf("%d\n",ans);
}
return ;
}

Fire Game--FZU2150(bfs)的更多相关文章

  1. fzu2150(bfs)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2150 题意:在任意两处点火,求最短时间烧光所有草堆. 分析:由于n,m比较小,将所有草堆坐标记录下来,然后暴力 ...

  2. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  3. 【算法导论】图的广度优先搜索遍历(BFS)

    图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...

  4. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

  5. 【BZOJ5492】[HNOI2019]校园旅行(bfs)

    [HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...

  6. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  7. 图的 储存 深度优先(DFS)广度优先(BFS)遍历

    图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...

  8. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  9. 层层递进——宽度优先搜索(BFS)

    问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...

  10. HDU.2612 Find a way (BFS)

    HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...

随机推荐

  1. 基于github+hexo搭建个人博客(window)

    0x01 环境搭建 1.Node.js环境 下载Node.js安装文件:https://nodejs.org/en/download/ 根据系统选择相应安装包下载,安装过程一路Next,默认设置即可. ...

  2. linux环境下执行RF测试脚本

    1. 测试执行 测试管理平台需根据用户选中的测试案例,按照相应格式对执行启动命令进行组装和发送,触动案例的自动化测试执行. 命令格式根据测试模式(以项目为单位.以测试集为单位.以案例为单位)具有不同的 ...

  3. Qt生成ui文件对应的.h和.cpp文件

    在VS中,可以通过CMake设定QT5_WRAP_UI来编译a.ui到ui_a.h, 要想快速生成a.h和a.cpp,经过尝试,必须使用Qt Creator,否则就手写.

  4. N76E003之WDT(看门狗定时器)

    N76E003提供一个看门狗定时器(WDT),它可以配置成一个超时复位定时器用于复位整个设备.一旦由于外界干扰设备进入非正常状态或挂起,看门狗可以复位恢复系统.这有用于监测系统运行以提高系统可靠性.对 ...

  5. Glide加载图片缓存库出现——You cannot start a load for a destroyed activity

    请记住一句话:不要再非主线程里面使用Glide加载图片,如果真的使用了,请把context参数换成getApplicationContext.

  6. .net写入文本到本地

    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"d:\test\ErrorLog.txt", t ...

  7. 【Python】协程

    协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在 ...

  8. QSS样式表之PS黑色风格+白色风格+淡蓝色风格(开源)

    用QUI皮肤生成器制作皮肤,基本上不超过一分钟就可以生成一套自己想要的皮肤,只要设置八种颜色即可.本人非常喜欢这套黑色风格样式皮肤,特意分享出来,下载地址:https://download.csdn. ...

  9. jQuery Sizzle选择器(二)

    自己开始尝试读Sizzle源码.   1.Sizzle同过自执行函数的方式为自己创建了一个独立的作用域,它可以不依赖于jQuery的大环境而独立存在.因此它可以被应用到其它js库中.实现如下:(fun ...

  10. POP3命令与分析

    http://www.cnblogs.com/crystalray/p/3302121.html POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何 ...