山东农业大学校赛 H wyh的吃鸡 最短路 dij

链接:https://www.nowcoder.com/acm/contest/93/H
来源:牛客网

题目描述

最近吃鸡游戏非常火,你们wyh学长也在玩这款游戏,这款游戏有一个非常重要的过程,就是要跑到安全区内,否则就会中毒持续消耗血量,我们这个问题简化如下

假设地图为n*n的一个图,图中有且仅有一块X的联通快代表安全区域,有一个起点S代表缩圈的时候的起点,图中C代表的是车(保证车的数量小于等于100),标记为.的代表空地,可以任意通过,O代表障碍物不能通过。每次没有车的时候2s可以走一个格(只能走自己的上下左右4个方向),有车的话时间为1s走一个格

现在告诉你最多能坚持的时间为t秒,问你在t秒内(含t秒)能否从s点到达安全区域,能的话输出YES,并且输出最短时间,不能的话输出NO
输入描述:

输入第一行一个整数T(1<=T<=10)
接下来有T组测试数据,每组测试数据输入2个数n和k(1<=n<=100,1<=k<=10^9)
接下来n行,每行n个字符,代表对应的n*n的地图,每个字符都是上面的一种,并且保证只有一个起点,只有一块安全区域。

输出描述:

对于每组测试数据,先输出能否到达,能的话输出YES,然后换行输出最短时间,如果不能的话直接输出NO

示例1
输入

3
2 3
.X
S.
2 3
.X
SC
2 4
.X
S.

输出

扫描二维码关注公众号,回复: 1501662 查看本文章

NO
YES
3
YES
4

解题思路:
稍微有点经验的都会想到用优先队列去跑最短路,但这题的坑点在于,第一个到达某点的状态可能不是最优解(因为有车子的存在)那怎么处理这种情况呢。 很简单 多开一维状态就行了,分别处理到达某点有车和没车的状态。 这样,就不会丢失最优解了。
当前定义的状态会丢失最优解 最简单有效的办法就是多加一维状态 如果一维不够 那就两维。。
https://blog.csdn.net/lifelikes/article/details/77487976 是一样的坑点。。。。
被坑两次了 太菜了 太菜了

猜你喜欢

转载自blog.csdn.net/lifelikes/article/details/79828708