700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 关于链式前向星。

关于链式前向星。

时间:2023-05-26 16:58:06

相关推荐

关于链式前向星。

一些代码

理解

#include<bits/stdc++.h>using namespace std;//优先队列优化的链式前向星const int maxn=1000;const int INF=0x3fffffff;struct Edge{int from, to, dist;Edge(int u, int v, int d):from(u),to(v),dist(d){}};struct HeapNode{int u, d;HeapNode(int u, int d):u(u),d(d){}bool operator < (const HeapNode & r) const {return d>r.d;}};struct Dijkstra{int n, m;vector<int> G[maxn];vector<Edge> edges;int dis[maxn];int pre[maxn];int v[maxn];void AddEdge(int u, int v, int d){edges.push_back(Edge(u, v, d));G[u].push_back(edges.size()-1);}void init(int v_size){n=v_size;edges.clear();for(int i=0; i<n; i++) G[i].clear();memset(pre, 0, sizeof(pre));}void dijkstra(int s){for(int i=0; i<n; i++) dis[i]=INF;dis[s]=0;memset(v, 0, sizeof(v));priority_queue<HeapNode> Q;Q.push(HeapNode(s, 0));while(!Q.empty()){HeapNode t=Q.top();Q.pop();int x=t.u;if(v[x]) continue;v[x]=1;for(int k=0; k<G[x].size(); k++){Edge & e = edges[G[x][k]];if(dis[x]+e.dist<dis[e.to]){dis[e.to]=dis[x]+e.dist;pre[e.to]=x;Q.push(HeapNode(e.to, dis[e.to]));}}}}};int main(){int u, v, d; Dijkstra a;a.init(10);while(){cin>>u>>v>>d;a.AddEdge(u, v, d); }a.dijkstra(1);cout<<a.dis[5]<<endl;return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
链式前向星(转)

链式前向星(转)

2018-10-19

链表 链式前向星

链表 链式前向星

2018-10-26

链式前向星 详解

链式前向星 详解

2022-09-09

链式前向星

链式前向星

2023-09-25