lzm
who dare win.
posts - 14, comments - 29, trackbacks - 0, articles - 0
導航
C++博客
首頁
新隨筆
聯系
聚合
管理
<
2009年4月
>
日
一
二
三
四
五
六
29
30
31
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
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(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
搜索
積分與排名
積分 - 38926
排名 - 544
最新評論
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算法(6202)
2.?Kruskal算法(4564)
3.?Prim算法(4354)
4.?(正則表達式)是否匹配(字符串)(3936)
5.?加減乘除24(2405)
評論排行榜
1.?加減乘除24(7)
2.?poj 1094 Sorting It All Out(5)
3.?Quicksort 快速排序(4)
4.?(正則表達式)是否匹配(字符串)(3)
5.?Dijkstra算法(3)
Topsort 拓撲排序
Posted on 2009-04-06 09:40
lzmagic
閱讀(2062)
評論(2)
編輯
收藏
引用
所屬分類:
Algorithm
/**/
/*
*
* TOPSORT(簡單版) 拓撲排序(Topological Sort)
* 輸入:有向圖g
* 輸出:是否存在拓撲排序,如果存在,獲取拓撲排序序列seq
* 結構:圖g用鄰接矩陣表示
* 算法:廣度優先搜索(BFS)
* 復雜度:O(|V|^2)
*/
#include
<
iostream
>
#include
<
vector
>
#include
<
queue
>
#include
<
iterator
>
#include
<
algorithm
>
#include
<
numeric
>
#include
<
climits
>
using
namespace
std;
int
n;
//
n :頂點個數
vector
<
vector
<
int
>
>
g;
//
g :圖(graph)(用鄰接矩陣(adjacent matrix)表示)
vector
<
int
>
seq;
//
seq :拓撲序列(sequence)
bool
TopSort()
{
vector
<
int
>
inc(n,
0
);
for
(
int
i
=
0
; i
<
n;
++
i)
for
(
int
j
=
0
; j
<
n;
++
j)
if
(g[i][j]
<
INT_MAX)
++
inc[j];
//
計算每個頂點的入度,
queue
<
int
>
que;
for
(
int
j
=
0
; j
<
n;
++
j)
if
(inc[j]
==
0
) que.push(j);
//
如果頂點的入度為0,入隊。
int
seqc
=
0
;
seq.resize(n);
while
(
!
que.empty())
//
如果隊列que非空,
{
int
v
=
que.front(); que.pop();
seq[seqc
++
]
=
v;
//
頂點v出隊,放入seq中,
for
(
int
w
=
0
; w
<
n;
++
w)
//
遍歷所有v指向的頂點w,
if
(g[v][w]
<
INT_MAX)
if
(
--
inc[w]
==
0
) que.push(w);
//
調整w的入度,如果w的入度為0,入隊。
}
return
seqc
==
n;
//
如果seq已處理頂點數為n,存在拓撲排序,否則存在回路。
}
int
main()
{
n
=
7
;
g.assign(n, vector
<
int
>
(n, INT_MAX));
g[
0
][
1
]
=
1
, g[
0
][
2
]
=
1
, g[
0
][
3
]
=
1
;
g[
1
][
3
]
=
1
, g[
1
][
4
]
=
1
;
g[
2
][
5
]
=
1
;
g[
3
][
2
]
=
1
, g[
3
][
5
]
=
1
, g[
3
][
6
]
=
1
;
g[
4
][
3
]
=
1
, g[
4
][
6
]
=
1
;
g[
6
][
5
]
=
1
;
if
(TopSort())
{
copy(seq.begin(), seq.end(), ostream_iterator
<
int
>
(cout,
"
"
));
cout
<<
endl;
}
else
{
cout
<<
"
circles exist
"
<<
endl;
}
system(
"
pause
"
);
return
0
;
}
Feedback
#
re: [圖論算法] TOPSORT 拓撲排序
回復
更多評論
2009-04-07 13:38 by
aiver
你的代碼輸出是 0 1 4 2 6 3 5, 2先于3輸出了,有問題。
#
re: [圖論算法] TOPSORT 拓撲排序
回復
更多評論
2009-04-07 14:37 by
lzmagic
@aiver
啊哈,有個小bug,現在已經修改好了,謝謝指出錯誤~
答案是:0 1 4 3 2 6 5
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
Floyd_Warshall算法
Kruskal算法
Prim算法
Critical Path 關鍵路徑
Bellman_Ford算法 SPFA算法
Dijkstra算法
USP 無權最短路徑算法
Topsort 拓撲排序
(正則表達式)是否匹配(字符串)
Quicksort 快速排序
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © lzmagic
成人综合久久精品色婷婷
|
国产视频久久
|
久久人妻少妇嫩草AV无码专区
|
久久综合狠狠综合久久综合88
|
久久精品国产亚洲AV电影
|
久久久久国产一级毛片高清版
|
久久精品亚洲男人的天堂
|
亚洲色欲久久久综合网东京热
|
久久精品国产亚洲欧美
|
婷婷国产天堂久久综合五月
|
99久久无色码中文字幕
|
日日狠狠久久偷偷色综合96蜜桃
|
久久久无码一区二区三区
|
久久久久亚洲AV无码专区网站
|
欧美大香线蕉线伊人久久
|
人妻中文久久久久
|
91久久精品国产91性色也
|
日产精品久久久久久久
|
久久青青草原亚洲av无码
|
久久av无码专区亚洲av桃花岛
|
久久久久综合中文字幕
|
久久国产乱子伦免费精品
|
久久se精品一区二区影院
|
国内精品久久久久久99蜜桃
|
国产A级毛片久久久精品毛片
|
国产亚洲精久久久久久无码AV
|
国内精品伊人久久久久av一坑
|
久久精品国产精品青草app
|
久久人人爽人人人人片av
|
婷婷久久综合九色综合绿巨人
|
欧美伊人久久大香线蕉综合69
|
国产精品久久久久久福利69堂
|
久久久久久久97
|
综合人妻久久一区二区精品
|
国产69精品久久久久APP下载
|
久久99热这里只有精品66
|
日韩AV毛片精品久久久
|
日韩欧美亚洲综合久久影院Ds
|
久久久免费观成人影院
|
久久人人爽人人爽人人片AV东京热
|
欧美成人免费观看久久
|