称号:fzu 2150 Fire Game

:给出一个m*n的图,‘#’表示草坪,‘ . ’表示空地,然后能够选择在随意的两个草坪格子点火。火每 1 s会向周围四个格子扩散,问选择那两个点使得燃烧全部的草坪花费时间最小?

分析:这个题目假设考虑技巧的话有点难度,可是鉴于数据范围比較小,我们能够暴力枚举随意的草坪所在的点,然后两个点压进队列里面BFS。去一个满足条件的最小值就可以。

顺便说一下 fzu 2141 Sub-Bipartite Graph 的思路,比赛的时候没有做出来。

这个题目想的复杂了,完了之后发现别人用贪心二分染色。每一个点贪心选择与它相连点的颜色较多的相反的颜色,这样就能够了。看来当时真是想复杂了。

AC代码:

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
typedef long long LL;
const int N = 15;
int dx[5] = {0,0,1,-1};
int dy[5] = {1,-1,0,0};
struct Node
{int x,y;int cnt ;
};
vector<Node> v;
char mp[N][N];
int vis[N][N];
int n,m;
int BFS(Node a,Node b)
{memset(vis,0,sizeof(vis));queue<Node> q;vis[a.x][a.y]  = vis[b.x][b.y] = 1;a.cnt = 0,b.cnt = 0;q.push(a),q.push(b);int ans = 0x3f3f3f3f;int cas = 1;while(!q.empty()){a = q.front();q.pop();//printf("%d %d %d\n",a.x,a.y,a.cnt);ans = a.cnt;for(int i = 0;i<4;i++){b.x = a.x + dx[i];b.y = a.y + dy[i];b.cnt = a.cnt + 1;//printf("B:%d %d %d\n",b.x,b.y,b.cnt);if(b.x>0 && b.y>0 && b.x<=n && b.y<=m && vis[b.x][b.y]==0 && mp[b.x][b.y]=='#'){vis[b.x][b.y] = 1;q.push(b);}}}return ans;
}
void print()
{for(int i=1;i<=n;i++){for(int j = 1;j<=m;j++){printf("%c ",mp[i][j]);}puts("");}
}
int main()
{//freopen("Input.txt","r",stdin);int T;scanf("%d",&T);for(int cas=1;cas<=T;cas++){v.clear();scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){getchar();for(int j=1;j<=m;j++){scanf("%c",&mp[i][j]);if(mp[i][j]=='#')v.push_back((Node){i,j,0});}}int ans = 0x3f3f3f3f;for(int i=0;i<v.size();i++){for(int j=i;j<v.size();j++){int tmp = BFS(v[i],v[j]);bool ok = true;for(int k = 1;k<=n;k++){for(int f = 1;f<=m;f++){if(vis[k][f] == 0 && mp[k][f]=='#'){ok = false;break;}}if(ok==false)break;}if(ok){ans = min(ans,tmp);}}}printf("Case %d: ",cas);if(ans == 0x3f3f3f3f)puts("-1");elseprintf("%d\n",ans);}return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/zfyouxi/p/4840740.html

fzu 2150 Fire Game 【身手BFS】相关推荐

  1. FZU 2150 Fire Game

    点击打开链接 Problem 2150 Fire Game Accept: 237    Submit: 808 Time Limit: 1000 mSec    Memory Limit : 327 ...

  2. FZU 2150 Fire Game bfs

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103921#problem/I bfs水题.好像还做过一次了.思路题意都见代码吧 ...

  3. FZUOJ 2150 Fire Game

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2150 题目大意:小明小红要在一块网格状土地上玩火.土地上有的地方是草块,有的地方是空地.草地会被相邻格子的火引 ...

  4. Fire Game FZU - 2150 (水搜索)

    其实写一个spfa就行  遍历所有的草的点  组合两个 求最大时间的最小 #include <iostream> #include <cstdio> #include < ...

  5. Fire!——两个BFS

    [题目描述] [题目分析] 看到题目后很清楚是两个BFS,可是我觉得对于火的BFS可以转换成判断,我的做法是将火的位置全部记录下来,然后判断某个位置距离每个火的步数是否小于当前步数,可是错了,还不清楚 ...

  6. FZU 2124 吃豆人 bfs

    题目链接:吃豆人 比赛的时候写的bfs,纠结要不要有vis数组设置已被访问,没有的话死循环,有的话就不一定是最优解了.[此时先到的不一定就是时间最短的.]于是换dfs,WA. 赛后写了个炒鸡聪明的df ...

  7. [kuangbin带你飞]专题1

    专题一 简单搜索 POJ 1321 棋盘问题 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大 ...

  8. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  9. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

最新文章

  1. 无数优秀投资人的选择——GMQ Group
  2. 烂泥:学习Nagios(三): NRPE安装及配置
  3. 60. Leetcode 面试题 10.03. 搜索旋转数组 (二分查找-局部有序)
  4. 创业者的关键词:坚持、忍耐、积累
  5. spring boot filter配置方式
  6. poi动态创建文档_POI创建的文档具有不同条件的灵活样式
  7. 数据字典表Truncate丢失将招致数据库不可用
  8. 第十七届“科大讯飞杯”高校网络友谊赛——F-排列计算
  9. ubuntu18.04 有线未托管解决
  10. 企业邮箱能设置个人昵称吗,如何设置?
  11. 802.11bgn信道划分及WirelessMon规划频段
  12. 从零开始学习CANoe(二)—— CANdb++ 创建 dbc文件
  13. 理财APP的低成本ASO优化实战
  14. java实现九九乘法表
  15. 使用Whisper框架快速为项目添加国际化支持
  16. 中国修边压力机行业市场供需与战略研究报告
  17. codeforces 1367B - Even Array
  18. 第十八次CCF计算机软件能力认证
  19. 斯诺登“现身”CES展会 称想回到美国
  20. Thinkphp开发视频打赏平台源码

热门文章

  1. python查找字符串出现次数_Python 中找出字符串中出现频率最高的字母
  2. linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
  3. mysql 最小日期函数_MySQL 日期加减函数汇总
  4. java中数组的含义_数组
  5. 2018年英语计算机职称考试,2018年职称计算机考试报考指南大全
  6. MySQL如何快速插入数据
  7. Pyhton,OpenCV对象检测之——Haar级联人脸及眼睛检测
  8. 网络模型:(0)背景
  9. java远程方法调用(rmi)--好_RMI-Java远程方法调用的实现(二)
  10. 华数机器人码垛_冲压机器人研究现状与发展方向