FZU Problem 2150 Fire Game (BFS,java)

fzu 2150 Fire Game 【技巧BFS】 题目: fzu 2141 Sub-Bipartite Graph (贪心) 阅读详情

Problem 2150 Fire Game

Accept: 2070    Submit: 7235
Time Limit: 1000 mSec    Memory Limit : 32768 KB

Problem Description

Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns). At the beginning, each grid of this board is consisting of grass or just empty and then they start to fire all the grass. Firstly they choose two grids which are consisting of grass and set fire. As we all know, the fire can spread among the grass. If the grid (x, y) is firing at time t, the grid which is adjacent to this grid will fire at time t+1 which refers to the grid (x+1, y), (x-1, y), (x, y+1), (x, y-1). This process ends when no new grid get fire. If then all the grid which are consisting of grass is get fired, Fat brother and Maze will stand in the middle of the grid and playing a MORE special (hentai) game. (Maybe it’s the OOXX game which decrypted in the last problem, who knows.)

You can assume that the grass in the board would never burn out and the empty grid would never get fire.

Note that the two grids they choose can be the same.

Input

The first line of the date is an integer T, which is the number of the text cases.

Then T cases follow, each case contains two integers N and M indicate the size of the board. Then goes N line, each line with M character shows the board. “#” Indicates the grass. You can assume that there is at least one grid which is consisting of grass in the board.

1 <= T <=100, 1 <= n <=10, 1 <= m <=10

Output

For each case, output the case number first, if they can play the MORE special (hentai) game (fire all the grass), output the minimal time they need to wait after they set fire, otherwise just output -1. See the sample input and output for more details.

Sample Input

43 3.#.###.#.3 3.#.#.#.#.3 3...#.#...3 3###..##.#

Sample Output

Case 1: 1
Case 2: -1
Case 3: 0
Case 4: 2

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2150
解题思路,典型的BFS,枚举两个点,当两个点都满足“点火”条件时,两个点都压入队列(如果两个点位置重合,压入一个点即可)。每个点结构的成员变量有横坐标x、纵坐标y和步数cnt。

代码如下:
import java.util.*;

public class Main{
	public static int T,n,m;
	public static int[] dx = {0,-1,0,1};      //改变上下左右四个方向的数组
	public static int[] dy = {-1,0,1,0};
	public static boolean flog= false;                    //flog用来标记是否能“完全燃烧”矩阵里的草
	public static char[] ch[] = new char[12][12];         //矩阵模型
	public static boolean[] vis[] = new boolean[12][12];  //标记是否访问过当前位置
	static class node{            //每个点的结构体
		int x;
		int y;
		int cnt;
		public node(int x,int y,int cnt){
			this.x = x;
			this.y = y;
			this.cnt = cnt;
		}
	}
	public static int BFS(int x1,int y1,int x2,int y2,int number){
		Queue <node> q = new LinkedList<node>();      //注意队列的初始化一定要写在BFS中
		q.add(new node(x1,y1,0));                     //把初始位置的点压入队列
		if(x1!=x2 || y1!=y2){
			q.add(new node(x2,y2,0));
		}
		int curans = 0;
		while(!q.isEmpty()){
			node nd = q.poll();                       //取出队首的点并把点从队列中移除
			boolean f = true;                         //用来判断在该点之后是否能继续走下去
			for(int i=0;i<4;i++){
				int xx = nd.x+dx[i];
				int yy = nd.y+dy[i];
				int ct = nd.cnt+1;
				if(xx < 0 || yy<0 || xx>=n ||yy>=m|| ch[xx][yy]=='.' || vis[xx][yy]){
					continue;                        //判断下一个点是否出界以及是否满足条件
				}
				vis[xx][yy] = true;
				f = false;
				number--;                          //每走完一步,剩余种草的位置个数减1
				if(number==0){                     //燃烧完所有的草,返回最大步数
					flog = true;
					curans = Math.max(curans,ct);
					return curans;
				}
				node dd = new node(xx,yy,ct);
				q.add(dd);                //把新的点压入队列
			}
			if(f){                        //不能继续走下去,纪录当前点的步数
				curans = nd.cnt;
			}
		}
		return Integer.MAX_VALUE;
	}
	
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		T = sc.nextInt();

		for(int ca = 1;ca <= T;ca ++){
			n = sc.nextInt();
			m = sc.nextInt();
			int num = 0;
			String str = new String();
			for(int i=0;i<n;i++){
				str = sc.next();
				for(int j=0;j<str.length();j++){
					ch[i][j] = str.charAt(j);
					if(ch[i][j]=='#'){
						num++;
					}
				}
			}
			if(num<=2){                   //种草的位置不多于2格,0步即可燃烧完
				System.out.println("Case "+ca+": 0");
				continue;
			}
			int ans = Integer.MAX_VALUE;    //初始化ans的值为最大值
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(ch[i][j]=='.'){
						continue;
					}
					for (int h = i;h<n;h++){
						for(int k=0;k<m;k++){
							if(ch[h][k]=='.'){
								continue;
							}
							flog = false;                  //初始化flog的值
							for(int i1=0;i1<12;i1++){      //初始化标记数组vis
								for(int i2=0;i2<12;i2++){
									vis[i1][i2] = false;
								}
							}
							vis[i][j] = true;
							vis[h][k] = true;
						    int cur = BFS(i,j,h,k,num-2);
							if(flog){
								ans = Math.min(ans,cur);   //成功燃烧完一次,更新ans为最小值
							}
						}
					}
				}
			}
			if(ans==Integer.MAX_VALUE){
				System.out.println("Case "+ca+": -1");
			}else{
				System.out.println("Case "+ca+": "+ans);
			}
		}
	}
}




Serdes之什么是(CDR)? 光收发器和电收发器使用的是我们所说的串行数据通信。在这种通信方式中,数据位是按顺序一个接一个地传输的。光收发器和电收发器使用的是我们所说的串行数据通信。在这种通信方式中,数据位是按顺序一个接一个地传输的。目前市场上大多数收发器都没有专用的时钟输入,因此时钟恢复和数据重新定时等功能是在收发器外部(即在主板上)进行的。接收端则需要恢复时钟以采样串行线上的数据。为了实现这一点,接收端需要一个与输入数据频率大致相同的时钟。通过使参考时钟与输入数据信号的跳变相位对齐,可以生成一个恢复的时钟。这被称为时钟恢复。 阅读详情

相关推荐

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线

本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。

hscing的博客 1065

Fire Game FZU - 2150

这个题题意是两个人在草地上选两点为起点放火,问能不能把草地烧完,能的话画出最短的时间。做法就是选两个起点进行BFS,由于图比较小,可以直接枚举任意两个点进行BFS,选取最短时间这是一个有两个起点的BFS,起初我是打算开两个队列,然后同时进行BFS,然后错了,,后来一想,即便是把所有的点都放在同一个队列里,也是相当于从两个点开始的BFS,然而还是Wrong,后来想是不是判断不能燃烧所有的草地那个地方错

lee_haoze的博客 406

利用Ghidra与SVD插件实现STM32固件深度逆向分析

本文详细介绍了如何利用Ghidra逆向工程框架结合SVD插件,实现对STM32固件(.bin文件)的深度逆向分析。通过加载描述芯片外设寄存器的SVD文件,Ghidra能将晦涩的硬件地址操作转换为可读的寄存器符号,极大提升了对嵌入式固件中通信协议、安全校验等关键逻辑的分析效率。文章涵盖了从Java环境搭建、工具配置到实战逆向解析的完整流程。

peach的博客 942

FZU 2150

前言:邝斌搜索专题遗留题 题意:‘#’ 表示草’.’ 表示空地,火烧草每一秒向四周蔓延,不能跨过空地,同时从图上两个地方点火,问最小需要多少时间烧完,不能烧完输出-1. 数据,刚好合适枚举任意两个点,广度搜索。 别的没什么特别。#include <fstream> #include <iostream> #include <string> #include <complex> #include

笔记 239

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-单端信号详细介绍了单端信号如何进行TDR仿真分析,下面介绍如何对差分信号进行TDR分析,还是以下图为例进行分析。Impedance是时域阻抗曲线,也是最主要的观测指标,注意:impedance曲线的时间刻度不是延时,延时=时间刻度/2,因为TDR测量的是用一来一回的原理去测量的。Use Lossy peeling 默认不勾选,勾选的话代表同时仿真无损和有损方案,不勾选代表仅仿真有损方案。

weixin_54787054的博客 855

SMMU软件指南SMMU编程之流表(Stream Table)

SMMU使用一组内存中的数据结构来定位翻译数据,详见“转换过程概述”(Translation process overview)。SMMU_(*_)STRTAB_BASE 存储初始结构(流表,Stream Table)的基地址。流表项(Stream Table Entry, STE)包含二级(Stage 2)转换表的基址指针,同时也定位一级(Stage 1)配置结构,这些配置结构包含转换表的基址指针。 传入事务的 StreamID,由 SEC_SID 进行限定,决定了用于查找的流表,并定位相应的STE。

AI-安全-功耗 1188

FZU2150 Fire Game (BFS的应用)

题意 两个熊孩子在n*m的平地上放火玩,#表示草,两个熊孩子分别选一个#格子点火,火可以向上向下向左向右在有草的格子蔓延,点火的地方时间为0,蔓延至下一格的时间依次加一。求烧完所有的草需要的最少时间。如不能烧完输出-1。 解题 枚举两个人所选的#格子。O(n^2*m^2)的复杂度。 从所枚举的两个格子开始BFS,BFS过程中计数所遍历的#格子数cnt以及遍历到某个#格子的时刻。BFS完好比...

EnjoyingAC的博客 277

【毫米波混合波束成形】第3章 深度展开网络:将迭代优化嵌入计算图

相位提取算子 $P_\phi: \mathbb{C}^N \to \mathbb{C}^N$ 定义为逐元素相位归一化 $P_\phi(z) = \exp(j \cdot \angle z)$。该算子在复数域非全纯(Non-holomorphic),标准反向传播需扩展至Wirtinger微积分框架。对于复数变量 $z = x + jy$,Wirtinger导数定义:相位提取算子的Jacobian矩阵在极坐标下具有稀疏结构。

VectorShift的博客 404

FZU2150-Fire Game (双点BFS)

题目链接:https://vjudge.net/problem/FZU-2150 题意:最多可以选择两处火源,要把整个地图上的草地都点燃,火可以往上下左右四个方向扩散,能否把所有的草地都点燃,能的话输出最少时间,不能输出-1;'#'代表草地,'.'表示空地,空地不会起火。 思路:因为地图很小,所以暴力枚举两个起火点然后两个点同时进行BFS。因为不知道终点所以我们需要把走到每一个点的时间都存下来...

sugarbliss 709

人体红外传感器HC-SR501

本文记录的是如何用stm32使用HC-SR501。实验平台:野火指南者stm32f103vet6。实验现象:一旦有人体经过,LED会亮红色。HC-SR501 传感器工作原理人体都有恒定的体温,一般在 37 度,所以会发出特定波长 10UM 左右的红外线,被动式红外探头就是靠探测人体发射的 10um 左右的红外,进行工作的。人体发射的 10um 左右。

weixin_43772611的博客 1万+

【WLAN】【基础知识】WIFI那些事儿之信道和频谱(涵盖2.4G、5G、6G,全网最全)

- 从事WIFI相关开发或测试工作,经常要和信道、频宽、频率等打交道,本文仅将平时涉及的2.4G、5G、6G的信道、频宽、频率等做一总结。 - 一图胜万言,本文汇总了工作中经常用到的频谱图,保证全网最全!!! - 本博客地址,https://blog.youkuaiyun.com/qxhgd,欢迎各位关注,转发请注明出处。

一介草民,只为生活。 1万+

FZU - 2150 两点BFS 技巧

题目链接 思路 题意非常简单,最多两个点同时开始烧,最少的花费时间。 暴力枚举一下,我的做法是使用一个标记来记录两个火堆的到达时间以及各自烧了多少。写完之后看了题解。发现有更简单的做法就是不考虑哪个火堆烧的,只记录是否被烧到以及烧到该点的最短时间。#include <iostream> #include <cstdio> #include <algorithm> #include<queue>

Peppermint__的博客 395

基于电阻分压 + 电压跟随器的直流母线电压采样电路

摘要:本文介绍了一种基于电阻分压和电压跟随器的直流母线电压采样电路设计。该电路通过R38(240kΩ)和R41(20kΩ)组成的分压网络将高电压(如48V)降至3V,再经GS8331运放构成的电压跟随器进行隔离缓冲,最后通过RC滤波输出给ADC采集。重点分析了关键元件的选型要求:分压电阻需高精度、低温度系数;运放需高输入阻抗、低失调电压;滤波电容需稳定性好。该设计适用于工业电源、新能源BMS、变频器等需要高精度电压采样的应用场景。

qq_37999850的博客 887

FZU - 2150 Fire Game(暴力+广搜)

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2150点击打开链接 Problem 2150 Fire Game Accept: 2540    Submit: 8781 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Fat bro

xuejye的博客 439

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

P1118 数字三角形游戏

有这么一个游戏: 写出一个1~N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置。下面是一个例子:     3   1   2   4       4   3   6         7   9          16 最后得到16这样一个数字。 现在想要倒着玩这样一个游戏

ysCover 1542

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

hihoCoder 买零食

时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食。然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称。第一次去一教小卖部买零食的时候,小Ho由于不懂事买了好一大堆东西,被小卖部姐姐给了一个“冷若冰霜”的眼神,食欲都下降了很多。 从那以后,小Ho就学乖了,去小卖部买东西只敢同时

ysCover 1338

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

hdu 1427 速算24点(java,DFS,全排列)

速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5070    Accepted Submission(s): 1310 Problem Description 速算24点相信绝大多数人都玩过。就是随机给你

ysCover 1333

蓝桥杯 PREV-9 大臣的旅费(深搜)

历届试题 大臣的旅费   时间限制:1.0s   内存限制:256.0MB     问题描述 很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城

ysCover 1317

poj 2676 Sudoku (基础DFS)

Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15456   Accepted: 7574   Special Judge Description Sudoku is a very simple task. A square table wi

ysCover 1237

Codeforces Round #313 (Div. 2) D. Equivalent Strings(简单搜索)

D. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today on a lecture about strings Gerald learned

ysCover 1189

poj 1011 Sticks (DFS+剪枝)

Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127771   Accepted: 29926 Description George took sticks of the same length and cut them randomly unt

ysCover 956

poj 1129 Channel Allocation (DFS 图的染色问题)

Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13152   Accepted: 6721 Description When a radio station is broadcasting over a very large

ysCover 938

Codeforces Round #321 (Div. 2) C. Kefa and Park time limit per test

C. Kefa and Park time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Kefa decided to celebrate his first big salary by go

ysCover 936

FZU 2196 Escape(BFS预处理+BFS搜索)

Problem 2196 Escape Accept: 123    Submit: 678 Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description 小明进入地下迷宫寻找宝藏,找到宝藏后却发生地震,迷宫各处产生岩浆,小明急忙向出口处逃跑。如果丢下宝藏,小明就能迅速离开迷宫,但小明并不想

ysCover 911

poj 3083 Children of the Candy Corn (DFS+BFS)

Children of the Candy Corn Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10881   Accepted: 4678 Description The cornfield maze is a popular Halloween tre

ysCover 911

poj 1416 Shredding Company (DFS)

Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4595   Accepted: 2633 Description You have just been put in charge of developing a new sh

ysCover 908
上一篇: hdu 5112 A Curious Matt (java,快速输入)
下一篇: 历届试题 剪格子 (DFS,java)
雨狮子
博客等级 码龄12年 24粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值