做了一道板子题,求v0点到任意点的最短距离和最短路径
这里用SPFA,记录一下
#include <bits/stdc++.h>
#define MAXN 500005
using namespace std;
typedef long long ll;
struct Edge{
ll next, weight;
Edge(ll _next, ll _weight){
next = _next;
weight = _weight;
}
};
vector<Edge> g[MAXN];//邻接表
ll n, m;
ll dis[MAXN], vis[MAXN];
ll pre[MAXN];
void spfa(ll s){
queue<ll> q;
for(ll i = 0; i <= MAXN; i++)
dis[i] = MAXN << 4;
memset(vis, 0, sizeof vis);
q.push(s);
vis[s] = 1;
dis[s] = 0;
while(!q.empty()){
ll u = q.front();
q.pop();
vis[u] = 0;
for(ll i = 0; i < g[u].size(); i++){
ll v = g[u][i].next;
if(dis[v] > dis[u] + g[u][i].weight){
dis[v] = dis[u] + g[u][i].weight;
pre[v] = u;//记录前驱