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) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
 
随机推荐
- [SublimeText] Sublime Text 2 运行 Python 脚本中文路径解决方法
			
在 SublimeText 中直接运行 Python 脚本,出现以下报错提示: Running python -u C:\Documents and Settings\Administrator\桌面 ...
 - [XPath] XPath 与 lxml (二)XPath 语法
			
XPath 选取节点时使用的表达式是一种路径表达式.节点是通过路径(path)或者步(steps)来选取的. 本章使用以下 XML 文档作为示例. <?xml version="1.0 ...
 - [Windows] Windows 8.x 取消触摸板切换界面
			
在鼠标中选中UltraNav,找到Application Gestures - Edge Swipes,取消Enable Edge Swipes.
 - JQuery插件的使用
			
今天就来总结一下jquery插件的使用,刚开始学习时间一直自己在写实现他的功能,现在发现jquery好强大啊,好多的功能都给我们封装好啦,jquery万岁,嘿嘿,下面就来简单的总结一下我们学习的:
 - 关于RabbitMQ交换机的理解
			
RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.消息中间件主要用于组件之间的解耦,消 ...
 - free -m 下的含义
			
如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看. $ free -mtotal used free shared buffers cachedMem: 1002 ...
 - <转>机器学习系列(9)_机器学习算法一览(附Python和R代码)
			
转自http://blog.csdn.net/han_xiaoyang/article/details/51191386 – 谷歌的无人车和机器人得到了很多关注,但我们真正的未来却在于能够使电脑变得更 ...
 - 某MDU产品OMCI软件升级加速方案
			
说明 本文基于某GPON MDU产品的当前情况,提出OMCI升级的加速方案. 因时间仓促和水平限制,文中难免存在错漏和不足之处,敬请指正. 一 问题提出 根据G.988标准相关描述,软件升级过程可分 ...
 - 【Linux】`ImportError: No module named '_tkinter'
			
在centos7 系统下,导入matplotlib时,出现ImportError: No module named '_tkinter'的错误 首先使用以下命令查看模块是否存在 yum list in ...
 - intellij2016.03激活
			
激活的时候采用server的方式 :http://jetbrains.tech