Fire Game--FZU2150(bfs)
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)的更多相关文章
- fzu2150(bfs)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2150 题意:在任意两处点火,求最短时间烧光所有草堆. 分析:由于n,m比较小,将所有草堆坐标记录下来,然后暴力 ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
随机推荐
- 重命名和重定向RF执行生成的output文件
命令: pybot -d output文件保存路径 -o output文件重命名 -d --outputdir dir Where to create output files. The defaul ...
- [转]linux下释放文件内存
在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了. ...
- Bugly最简单的配置方法
1,注册Bugly帐号 2.项目 build.gradle 中配置 compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.r ...
- iOS - 转场动画
苹果在 iOS7 定制了 ViewController 的切换效果 一 在iOS5和iOS6之前,ViewController的切换主要有4种 Push/Pop,NavigationViewCotnr ...
- spring配置文件中xsd引用问题
XML的一些概念 首先来看下xml的一些概念: xml的schema里有namespace,可以给它起个别名.比如常见的spring的namespace: xmlns:mvc="http ...
- C# mvc 500 内部服务器访问异常
20161018 项目发布到IIS上后,无法访问,由于页面默认跳转到异常处理去了,所以详细信息一直查看不了. 在找寻无果,异常信息日志记录无效的情况下,只好一点点来测试了 在异常处理前,就已经试过,a ...
- Python学习(22):模块
转自 http://www.cnblogs.com/BeginMan/p/3183656.html 一.模块基础 1.模块 自我包含,且有组织的代码片段就是模块 模块是Pyhon最高级别的程序组织单元 ...
- 【API设计】RESTful API 设计指南
RESTful API URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作. 例如 . REST描述的是在网络中client和server的一种交互形式:REST本身不 ...
- 【SpringCloud微服务实战学习系列】创建应用及解析
一.创建应用 使用官方Spring Initializr工具生成基础项目(http://start.spring.io/) 导入Intellij idea中 目录结构如下: 二.目录结构说明: src ...
- 流程图 --- BPMN规范简介
BPMN 目前 是2.0规范 http://www.bpmn.org/ BPMN Quick Guide http://blog.csdn.net/flygoa/article/details/5 ...