bfs每天一练

题目

在火星定居的人类致力于将火星发展为第二地球。
但是,草率的选择和不成熟的技术使灾难到来。
为了给火星提供氧气,正在开发中的一种食物感染了突变病毒,变成了释放致命毒气的毒性食物。由于毒气的迅速扩散,人们放弃了发展火星,开始逃跑。
火星的基地分为N个区域,以M个通道连接。所有区域都被连接,没有不被连接的区域。这N个区域中有K个区域存在释放毒气的食物。毒气每一天都会通过通道扩散到相邻的区域。在火星基地的人们为了逃跑需要在基地坚持很久,所以要聚集在毒气晚点扩散到的区域。

[图1]

如[图1]所示,在火星基地中有5个区域,6个通道。而且1号区域内生长着释放毒气的毒性食物。
此时考虑到毒气扩散的速度,1号区域已经布满毒气,一天后3,4号区域将布满毒气。
再过一天,5号区域和2号区域也将布满毒气。为了坚持更长时间,聚集在2号或者5号区域时,能够坚持2天。

[图2]

如[图2]所示,在与[图1]相同的火星基地中,3号区域生长着毒性食物的话,一天后其余所有区域将布满毒气。

毒性食物不是只生长在一个区域。如[图3]所示,火星基地共有7个区域,8个通道,7号和5号区域中生长着毒性食物的话,一天后3号、1号、4号区域,两天后6号区域,三天后2号区域将布满毒气。这是火星基地的人们聚集在2号区域时能够坚持最长时间3天。

[图3]

给定火星基地的信息和毒性食物的区域信息,编写程序,输出火星基地人群能坚持最长时间的区域和在该区域中坚持的天数,来营救人们。

[限制条件]

  1. 火星基地的区域数N为1以上1000以下的自然数,每个区域以1到N的序号区分。
  2. 火星基地的通道数M为1以上3000以下的自然数。
  3. 生长着毒性食物的区域数K为1以上20以下的自然数。
  4. 相同的通道信息不会多次输入。
  5. 每个区域都被连接。即,从任何区域经过1个及以上的通道后能够到达其他任何区域。

[输入]
最一开始给出测试用例个数T,然后给出T个测试用例。每个测试用例由多行组成,第一行为火星基地的区域数N和火星基地的通道数M,毒性食物的区域数K,以空格分开。
下一行为K个毒性食物的区域编号,以空格分开。下面的M行为连接不同区域的通道。给出两个区域编号A,B,表示A到B之间存在通道。

[输出]
每个测试用例输出一行。以x (x 为测试用例编号, 从1开始)开头,空一格,输出火星基地的人们躲避的区域编号和坚持的天数。如果有多个区域都可以坚持最长天数时,输出编号小的区域。

[输入输出例子]
(输入)
3
5 6 1
1
1 3
4 3
3 5
5 2
1 4
3 2
5 6 1
3
1 3
4 3
3 5
5 2
1 4
3 2
7 8 2
7 5
6 3
4 1
3 7
4 6
3 1
4 5
5 1
2 6

(输出)
#1 2 2
#2 1 1
#3 2 3


代码

import java.util.*;

public class huoxingtaobao {
   
	static int T, N, M, K;//火星基地区域数N,通道数M,毒性食物区域数K
	static int []num;//毒性食物区域编号
	static int [][]road;//存储图的边信息
	static int area[];//定义一个距离数组,表示初始节点到各个节点的距离,也表示天数
//	static Queue<Integer> queue = new LinkedList<>();
	public static void main(String[] args) throws E
  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值