致远星的搜索战争 T3 星际穿梭 题解

致远星的搜索战争 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这种除外)

 

 

 

 

 

posted @ 2020-07-29 15:44  JiangXingchen  阅读(172)  评论(0编辑  收藏  举报
Live2D