次短路:最短路外的另一条最短路
两种次短路:
- 可经过重复顶点。
- 不可经过重复顶点。
如图所示
- 1->2->1->2->3
- 1->3
对于第一种次短路直接再加一个数组一起更新即可。
对于第二种次短路,需要记录下最短路的顶点,然后枚举这条路上的每一个相邻顶点,使得次短路不经过这两点之间的边。
#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,double> pii;
const int maxn = 600;
struct Point{
int x,y;
}p[maxn];
vector<pii> G[maxn];
double dist(Point a, Point b) {
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
void add(int u, int v, double w) {
G[u].push_back(pii(v,w