最短路的幾種演算法

2021-10-10 22:32:07 字數 2389 閱讀 9132

單源無負權最短路:dijkstra

多源無負權最短路:floyd

單源負權最短路:bellman-ford,spfa

以hdu 2544為例

dijkstra

#include

using

namespace std;

typedef pair<

int,

int> par;

const

int maxv =

1e5+5;

const

int inf =

1000000000

;struct node

node

(int v,

int dis):v

(v),

dis(dis)

bool

operator

<

(const node &a)

const};

vector node[maxv]

;int dis[maxv]

;bool vis[maxv]=;

priority_queue q;

int n,m,u,v,w;

void

dijkstra

(int s)}}

}int

main()

for(

int i =

0; i < m; i++

)int st,ed;

dijkstra(1

);printf

("%d\n"

,dis[n]);

}}

floyd

#include

using

namespace std;

const

int maxn =

10002

;const

int inf =

0x3fffffff

;struct node };

int d[maxn]

[maxn]

;int n,m,u,v,val;

void

floyd()

}}}}

intmain()

floyd()

;for

(int i =

1; i <= n; i++

)printf

("\n");

}}注意:hdu2544會記憶體超限

bellman-ford:

#include

using

namespace std;

const

int maxn =

100000

;const

int inf =

0x3fffffff

;struct node};

vector adj[maxn]

;int n,m,u,v,val;

int d[maxn+5]

;bool

bellman

(int s)}}

// 以下為判斷負環的**負環的意思是乙個環的權值加起來為負值

for(

int u =

1; u <= n; u++)}

}return

true;}

intmain()

bellman(1

);printf

("%d\n"

,d[n]);

}

spfa:

#include

using

namespace std;

const

int maxn =

100000

;const

int inf =

0x3fffffff

;struct node };

vector adj[maxn]

;//adj為鄰接表

int d[maxn]

,num[maxn]

;//起點到各個點的距離 num記錄頂點的入隊次數

bool inq[maxn]

;//頂點是否在佇列中

int n,m,u,v,val;

bool

spfa

(int s)}}

}return

true;}

intmain()

spfa(1

);printf

("%d\n"

,d[n]);

}}

最短路的幾種常用演算法

hdu1874 暢通工程續 陳年水題,老少皆宜,最短路的入門作業 但是換個刷法,會更有意思 最短路的 floyd 演算法 include include define find min a,b a最短路dijkstra演算法的 鄰接陣實現 include include define find mi...

hdu2544 最短路 幾種最短路演算法實現

floyd warshall演算法 時間複雜度o v 3 一般不用 演算法模板 include include include using namespace std const int max v 110 const int inf 0x3f3f3f3f int d max v max v d u...

最短路,幾種做法

輸入 本題目包含多組資料,請處理到檔案結束。每組資料第一行包含兩個正整數n和m 0輸出 對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從s到t的路線,就輸出 1 用於解決最短路徑問題的演算法被稱做 最短路徑演算法 有時被簡稱作 路徑演算法 最常用的路徑演算法有四種 1.dijkstra ...