7-11 Saving James Bond - Hard Version (30 分)

本文介绍了如何解决7-11 Saving James Bond - Hard Version的问题,这是一道需要使用广度优先搜索(BFS)的算法题。在解决过程中,作者强调了在处理多条最短路径时应选择第一跳最短的路径,这是他在做题时忽视的一点。在BFS实现中,可以通过预先排列鳄鱼的顺序来确保找到正确的路径。作者提供了两种处理能否在鳄鱼间跳跃的方法,并建议在不需要多次使用计算结果时,可以现算现用。
摘要由CSDN通过智能技术生成

7-11 Saving James Bond - Hard Version (30 分)

原题链接:https://pintia.cn/problem-sets/16/problems/673
这道题本质是就是一道BFS,只不过要加上路径。
 开始做的时候比较顺利,但是总是有一个测试点没过去,找了半天还是找不到错误。于是google一下,发现是没仔细看题。
 题目中说,当有多条最短路径时,选择第一跳最短的。我竟然么看见(😭😭找了两个多小时)。处理第一条最短,比较简单的做法时我们在用BFS,一开始把鳄鱼入队时,就把顺序排好,这样出来的一定是最终的结果。

思路:

在处理能不能在两个鳄鱼之间跳时,一是可以先计算好能不能跳,然后直接在BFS里用结果。二是在BFS的过程中,判断能不能跳。
其实我个人比较推荐第二种,没必要先计算好,现算现用就行。不过如果计算的结构要多次使用的话,保存下来了比较好。

代码:
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
const int MAX = 110;
const int INFO = 1000000;
struct Node{
   
    int X,Y;
    Node() {
   } //用来不初始化定义Ver[101]
    Node(int _x,int _y) : X(_x),Y(_y) {
   } //用来提供X和Y的初始值
}Ver[MAX];
int Path[MAX]; //记录路径
int N,D;
bool book[MAX]; //记录是否访问
int last = -1;
queue<int> q;
bool IsVertexJump(int a,int b){
    //能不能从a到b
    return (pow(Ver[a].X-Ver[b].X,2) + pow(Ver[a].Y-Ver[b].Y,2)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值