zoukankan      html  css  js  c++  java
  • 致远星的搜索战争 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这种除外)

     

  • 相关阅读:
    leetcode——832. 翻转图像
    leetcode——830. 较大分组的位置
    leetcode——1089.复写零
    leetcode——86. 分隔链表
    leetcode——387. 字符串中的第一个唯一字符
    leetcode——389. 找不同
    leetcode——61. 旋转链表
    leetcode——24. 两两交换链表中的节点
    leetcode——817. 链表组件
    leetcode——234. 回文链表
  • 原文地址:https://www.cnblogs.com/Jiangxingchen/p/13389543.html
Copyright © 2011-2022 走看看