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)