实际上用两遍dijsktra算法就可以了,这里再复习下spfa,用spfa求多源单点最短路,用dijsktra求单源多点最短路:
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
#define INF 99999999
struct Edge{
int end, len;
Edge(int e, int l) : end(e), len(l){}
};
int N, M, X;
vector<Edge> in[1001];
vector<Edge> out[1001];
int disToX[1001];
bool inq[1001];
int disFromX[1001];
//calculate distance from all nodes to X using in-edge graph
void spfa()
{
//initialize
for(int i = 1; i <= N; ++i){
disToX[i] = INF;
inq[i] = false;
}
queue<int> q;
q.push(X);
disToX[X] = 0;
//process