图论--最短路-- Dijkstra模板(目前见到的最好用的)
生活随笔
收集整理的這篇文章主要介紹了
图论--最短路-- Dijkstra模板(目前见到的最好用的)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
之前的我那個板子,老是卡內存,不知道為什么,我看別人過的那個題都是結構體,我就開始對自己板子做了修改,然后他奶奶的就過了,而且速度也提高了,內存也小了。(自從用了這個板子,隔壁小孩饞哭了)也不知道為啥,但是之前那個少開一個0都超內存,咱也不知道咋回
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; struct Node {int var,next,val; } edge[100000005]; int head[100005],tot,dis[100005],N,M; bool vis[100005]; priority_queue<PII> Q; void add(int a, int b, int c) {edge[++tot].var = b;edge[tot].val = c;edge[tot].next = head[a];head[a] = tot; } void init()//多組輸入調用 {tot=0;memset(head,0,sizeof(head)); } void dijkstra(int s) {memset(dis,0x3f,sizeof(dis));//memset(vis,0,sizeof(vis));//while(Q.size()) Q.pop();dis[s] = 0;Q.push(make_pair(0,s));while(!Q.empty()){int x=Q.top().second;Q.pop();if(vis[x])continue;vis[x]=1;for(int i=head[x]; i; i=edge[i].next){int y=edge[i].var;if(dis[x]+edge[i].val<dis[y]){dis[y]=dis[x]+edge[i].val;if(!vis[y])Q.push(make_pair(-dis[y],y));}}} } int main() {int S;scanf("%d %d %d",&N,&M,&S);while(M--){int x,y,z;scanf("%d %d %d",&x,&y,&z);add(x,y,z);}dijkstra(S);for(int i=1; i<=N; i++)printf("%d ",dis[i]); }事。
總結
以上是生活随笔為你收集整理的图论--最短路-- Dijkstra模板(目前见到的最好用的)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果Mac怎么安装Win10 Mac安装
- 下一篇: 图论--最短路--SPFA模板(能过题,