單源無負權最短路: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 ...