首页 > 代码库 > [最短路]tvvj1031 热浪
[最短路]tvvj1031 热浪
题目链接
好久没敲 迪杰斯特拉算法了,这个模板题目搞一波。
#include <iostream>#include <queue>#include <cstring>#include <vector>#include <algorithm>#include <cstdio>#define Heap pair<int,int>using namespace std;priority_queue< Heap,vector<Heap>,greater<Heap> > s;const int MAXN=20005;struct node{ int u,v,w,next; node() {} node(int _u,int _v,int _w,int _next){ u = _u,v = _v, w = _w,next = _next; }}G[MAXN];int n,m,start,end,Count,head[MAXN],dis[MAXN];void AddEdge(int u,int v,int w){ G[Count] = node(u,v,w,head[u]); head[u] = Count++;}void Dij(int x){ for(int i=1;i<=n;i++) dis[i]=999999999; dis[x] = 0; s.push(make_pair(dis[x],x)); while( !s.empty() ){ Heap N = s.top(); s.pop(); int fuck = N.second; if(dis[fuck]!=N.first) continue; for(int e = head[fuck];e != -1;e=G[e].next){ int v =G[e].v; int w =G[e].w; if(dis[fuck]+w<dis[v]){ dis[v] = dis [fuck] + w; s.push(make_pair(dis[v],v)); } } } printf("%d\n",dis[end]); return;}int main(){ memset(head,-1,sizeof(head)); scanf("%d%d%d%d",&n,&m,&start,&end); for(int i=1;i<=m;i++){ int x,y,z; scanf("%d%d%d",&x,&y,&z); AddEdge(x,y,z); AddEdge(y,x,z); } Dij(start); return 0;}
[最短路]tvvj1031 热浪
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。