文章
3
粉丝
28
获赞
6
访问
1.4k
1)优先队列 q 的排序方法加上花费(钱);
2)增加花费数组 cost,同时更新 dist 和 cost 。
【本质】原比较条件:距离;现比较条件:距离、花费。
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 1005;
struct edge {
int u, v, w, c;
edge(int u, int v, int w, int c): u(u), v(v), w(w), c(c) {}
};
struct node {
int d, m, to; // 距离,钱,目的地
node(int d, int m, int to): d(d), m(m), to(to) {}
friend bool operator < (node A, node B) {
// 增加一个比较条件:钱
if (A.d == B.d && A.to == B.to) return A.m < B.m;
else return A.d > B.d;
}
};
vector<edge> edges; // 存储所有边
vector<int> G[maxn]; // 邻接表,存储与顶点u相连接的所有边在edges中的索引
int dist[maxn]; // dist[i]存储从起点到顶点i的最短距离
int cost[maxn]; // cost[i]存储从起点到顶点i的花费
int vis[maxn]; // vis[i]表示顶点i是否已经被访问过
int p[maxn]; // p[i]存储从起点到顶点i的最短路径上,i的前一个顶点
void dijkstra(int s) {
int i;
memset(dist, INF, sizeof(dist));
memset(vis, 0 , sizeof(vis));
...
登录后发布评论
暂无评论,来抢沙发