鄰接表實現,單源最短路徑

2021-07-04 11:39:19 字數 1310 閱讀 1260

本篇文章,參考了y990041769同學的blog,他的部落格位址如下[

受他啟發,這道題實際上從1出發到某個點,以及從此點回到1的最短距離。其實感覺只要建圖,跑一遍spfa之後,再逆序跑一遍spfa就好了,可是在建圖的時候坑死一大片,建圖的時候用vector是會t的,雖然本題給了8s(orz!)

參考鄰接表的模板,寫了乙個能過的版本,現在分享出來。

先上模板:

///模板一,建圖和儲存節點資訊

int h[n]; //存頭節點

struct

//記錄節點資訊

e[n];

int t,n,m,top;

void readmap(int m) //讀圖

}

///鄰接表spfa模板

long

long spfa(int st)

}} ///spfa已經講過,這裡不再贅述

long

long ans=0;

for(int i=1;i<=n;i++)

ans+=sp[i];

return ans;

}

///@zhangxiaoyu

///2015/8/10

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 1000005

#define inf 0x3f3f3f3f

typedef

long

long ll;

int x[maxn],y[maxn],c[maxn],sp[maxn];

int head[maxn]; ///儲存頭結點,即哪些邊是與當前節點連線

struct node;

struct node e[maxn];

int n,m;

void input1()

}void input2()

}ll spfa(int st)}}

ll ans=0;

for(int i=1;i<=n;i++)

ans+=sp[i];

return ans;

}int main()

return

0;}

單源最短路徑

include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...

單源最短路徑

最優子結構 最短路徑的子路徑也是最短路徑,動態規劃和貪心演算法的乙個重要指標。環路 一條最短路徑不可能包含環路 1 環路權重為負,如果有一條環路權重為負,則不存在最短路徑 2 環路權重為零,如果包含該環路,則將該環路去掉即可 3 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...

單源最短路徑

單源最短路徑問題,即在圖中求出給定頂點到其他任一頂點的最短路徑。1.最短路徑的最優子結構性質 該性質描述為 如果p i,j 是從頂點i到j的最短路徑,k和s是這條路徑上的乙個中間頂點,那麼p k,s 必定是從k到s的最短路徑。證明 假設p i,j 是從頂點i到j的最短路徑,則有p i,j p i,k...