致远星的搜索战争 T3 星际穿梭
题目背景
题目原名:さよなら 蒼き日々よ(再见了 苍白的岁月)
(为了保持队型忍痛割爱)
“香格里拉号”原型为美国海军埃塞克斯级航空母舰二十号舰香格里拉号。
因为轰炸东京任务的一个玩笑而得名。
指挥官是想听哪段记录呢?是人迹罕至的安息之地,还是地平线彼方的理想之乡?
舰艏迎风!让他们知道自由的重量!
题目描述
“香格里拉号”核聚变动力航母迷失在旷远的深空当中了
她的任务是到达几十光年外的致远星系外层与“企业号”会和
并击毁驻扎在致远星上的叛军“燕山湖”基地
但是幽暗的太空中悬浮着许多微陨石,他们对“香格里拉”是致命的
不过 ,“香格里拉”上挂载着许多“映山红”级反物质炸弹
每枚“映山红”可以击碎一块微陨石
为了简化问题
现在太空是一个 m × n的矩阵
这个矩阵只由0和1组成
“0”表示这里是空旷的太空,“香格里拉”在这里很安全
“1”表示这里有微陨石,“香格里拉”通过这里需要使用一枚“映山红”,通过后微陨石不会有变化,即此地依然存在微陨石
“香格里拉”号的初始位置处于坐标(1,1)
她上面搭载了t枚“映山红”反物质炸弹
“香格里拉”可以在结束一场战斗后,在太空中补满“映山红”至其开始时挂载的数量
即香格里拉可以连续通过t颗微陨石,通过t颗微陨石后进入太空则可以将“映山红”数量补回到t
致远星的“燕山湖”基地则处于坐标(m,n)
同时为了应对宇宙中瞬息万变的的情况
本题有很多组数据
每组数据的m,n, t都不同
但是“香格里拉”的燃料严重不足
所以她需要在尽可能小的步数内到达致远星
如果到达致远星之前“咉山红”被消耗完了
则“香格里拉”无法到达致远星
输入格式
首先输入数据组数s
下面依次输入s组数据
每组数据的第一行是用两个空格隔开的m,n和“映山红”导弹的数量t(t即你能连续通过微陨石的数量)
然后是一个 m * n 的只由0和1组成的矩阵表示每组数据所对应的太空的状态
输出格式
对于每组数据
输出一个取胜的最短路径smin
如无法取胜,则对所有无法取胜的所有数据都输出“Prepare for deck fire suppression operation!” (字符串较长建议复制粘贴)【准,准备甲板灭火程序!】
样例组
样例输入1 样例输出1
2 7
2 5 0 Prepare for deck fire suppression operation!
0 1 0 0 0
0 0 0 1 0
2 2 0
0 1
1 0
样例输入2 样例输出2
1 10
4 6 1
0 1 1 0 0 0
0 0 1 0 1 1
0 1 1 1 1 0
0 1 1 1 0 0
样例解释
参见样例2
(1,1)->(2,1)->(2,2)->(2,3)[消耗了映山红]->(2,4)[补满了映山红]->(1,4)->(1,5)->(1,6)->(2,6)[消耗了映山红] ->(3,6)[补满了映山红]->(4,6)[结束,步数为10]
提示说明
“映山红导弹”数量可能为0
m, n最大不超过 15
总共20组数据,每组数据有不大于十组情况
特别的,第一组数据只有一组情况且没有"映山红"导弹
样例我觉得很好懂就不解释了(大雾
题意没懂可咨询出题人大爷
提交程序时请使用 Shangrila.cpp/c/pas
一看到到搜索求最短问题,首先想到BFS(made SXY30分钟爆切)
但是本题和其他题目有所不同:其他题目的映山红都是不能恢复的
本题的映山红居然可以恢复!(太空加成)
那既然多了“映山红”这个条件
那我们既可以选择开个结构体保存此时能穿过的墙
又可以选择三维数组
这里其实我还挖了个坑
m,n不超过15,
映山红数量一旦超过30则可以沿着边走最短路径到达
所以可以加个特判,映山红大于30则输出边长
这样的话三维数组也不会开得太大
第二就是不能使用DFS
一会卡时间
二会在判断路线的时候出现一些问题,需要剪一下
不推荐使用DFS(SQ这种除外)