lzm
who dare win.
posts - 14, comments - 29, trackbacks - 0, articles - 0
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2012年3月
>
日
一
二
三
四
五
六
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
(13)
Algorithm(10)
OJ(3)
随笔档案
(14)
2009年4月 (11)
2009年3月 (2)
2008年10月 (1)
收藏夹
(4)
POJ
SL(4)
ZOJ
最新随笔
1. poj 1094 Sorting It All Out
2. Floyd_Warshall算法
3. Kruskal算法
4. Prim算法
5. Critical Path 关键路径
6. Bellman_Ford算法 SPFA算法
7. Dijkstra算法
8. USP 无权最短路径算法
9. Topsort 拓扑排序
10. (正则表达式)是否匹配(字符串)
11. Quicksort 快速排序
12. poj 1024 Tester Program
13. poj 1022 Packing Unit 4D Cubes
14. 加减乘除24
搜索
积分与排名
积分 - 38570
排名 - 543
最新评论
1. re: Dijkstra算法
请问一下,这个路径可以输出成功吗?为什么我的差不多可输不出来呢?
prev[w] = v; 只加着一句就够了吗?
--毛
2. re: (正则表达式)是否匹配(字符串)[未登录]
呃……请问为什么我输入A*G.C和AGTGTC,结果是dismatch呢?
--xyz
3. re: Kruskal算法
这个程序是不是有个bug:
如果节点数量为1,边数量为0
则应该是有生成树的,但是kruskal函数返回结果为false吧
个人意见
--mwxjm
4. re: 加减乘除24
想问下~为什么tb1函数要swap交换后在执行后有swap
--65666
5. re: poj 1024 Tester Program[未登录]
灰常感谢LZ,看了你的第5条那个,让debug了3个小时的我一下就过了;
因为我的初始化原来是-1,所以酿成杯具啊。。
这bug。。汗。
--joy
阅读排行榜
1. Dijkstra算法(6184)
2. Kruskal算法(4530)
3. Prim算法(4338)
4. (正则表达式)是否匹配(字符串)(3879)
5. 加减乘除24(2390)
评论排行榜
1. 加减乘除24(7)
2. poj 1094 Sorting It All Out(5)
3. Quicksort 快速排序(4)
4. (正则表达式)是否匹配(字符串)(3)
5. Dijkstra算法(3)
Floyd_Warshall算法
Posted on 2009-04-11 03:14
lzmagic
阅读(2022)
评论(0)
编辑
收藏
引用
所属分类:
Algorithm
/**/
/*
*
* FLOYD_WARSHALL 所有顶点对的最短路径算法 (All-Pairs Shortest Path Algorithm)
* 输入:图g
* 输出:所有顶点对的最短路径长
* 结构:图g用邻接矩阵表示
* 算法:Floyd_Warshall算法(动态规划)
* 复杂度:O(|V|^3)
*/
#include
<
iostream
>
#include
<
string
>
#include
<
vector
>
#include
<
deque
>
#include
<
list
>
#include
<
stack
>
#include
<
queue
>
#include
<
iterator
>
#include
<
algorithm
>
#include
<
numeric
>
#include
<
functional
>
#include
<
climits
>
using
namespace
std;
int
n;
vector
<
vector
<
int
>
>
g;
vector
<
vector
<
int
>
>
dist;
void
Floyd_Warshall()
{
//
初始化dist,顶点间(无中间顶点)最短路径长为边长,顶点到自身的最短路径长为0。
dist
=
g;
for
(
int
i
=
0
; i
<
n;
++
i)
dist[i][i]
=
0
;
//
从顶点i到定点j且中间顶点皆属于集合{0, 1, 2,
, k}的最短路径长。
for
(
int
k
=
0
; k
<
n;
++
k)
for
(
int
i
=
0
; i
<
n;
++
i)
for
(
int
j
=
0
; j
<
n;
++
j)
if
(dist[i][k]
<
INT_MAX
&&
dist[k][j]
<
INT_MAX)
dist[i][j]
=
min(dist[i][j], dist[i][k]
+
dist[k][j]);
}
int
main()
{
n
=
5
;
g.assign(n, vector
<
int
>
(n, INT_MAX));
g[
0
][
1
]
=
3
; g[
0
][
2
]
=
8
; g[
0
][
4
]
=
-
4
;
g[
1
][
3
]
=
1
; g[
1
][
4
]
=
7
;
g[
2
][
1
]
=
4
;
g[
3
][
0
]
=
2
; g[
3
][
2
]
=
-
5
;
g[
4
][
3
]
=
6
;
Floyd_Warshall();
for
(
int
i
=
0
; i
<
n;
++
i)
{
for
(
int
j
=
0
; j
<
n;
++
j)
cout
<<
dist[i][j]
<<
'
'
;
cout
<<
endl;
}
system(
"
pause
"
);
return
0
;
}
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Floyd_Warshall算法
Kruskal算法
Prim算法
Critical Path 关键路径
Bellman_Ford算法 SPFA算法
Dijkstra算法
USP 无权最短路径算法
Topsort 拓扑排序
(正则表达式)是否匹配(字符串)
Quicksort 快速排序
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © lzmagic