遠(yuǎn)風(fēng)工作室
C++博客
|
首頁
|
發(fā)新隨筆
|
發(fā)新文章
|
聯(lián)系
|
聚合
|
管理
隨筆:92 文章:0 評論:72 引用:0
判斷圖連通&求割點(diǎn)的算法
之所以把判斷圖連通的算法以及求圖中割點(diǎn)的算法放在一起寫,是因?yàn)檫@兩者之間有一定的關(guān)系。注意:
只有連通圖中才可能有割點(diǎn),不連通的圖是沒有割點(diǎn)的
。總的來說,這兩類算法都離不開并查集結(jié)構(gòu)和BFS先深搜索,具體如下:
1.判斷圖連通的算法
第一種方法基于BFS,首先利用鄰接表(鏈表形式或者數(shù)組形式都可以)存儲圖的信息,然后取標(biāo)號值最小的頂點(diǎn)u作為根節(jié)點(diǎn)進(jìn)行先深搜索,最終搜索到的節(jié)點(diǎn)將形成一棵樹,判斷圖是否連通,只要判斷是否所有節(jié)點(diǎn)都在樹上即可。
代碼如下:
//
graph[][]存儲圖信息,num[]存儲每個頂點(diǎn)的鄰接點(diǎn)數(shù)目
memset(flag,
0
,
sizeof
(flag));
DFS(
1
);
for
(i
=
1
; i
<=
nodeNum; i
++
)
{
if
(flag[i]
==
false
)
{
printf(
"
不連通\n
"
);
}
}
//
DFS算法
void
DFS(
int
x)
{
int
i;
flag[x]
=
true
;
for
(i
=
0
; i
<
num[x]; i
++
)
{
if
(flag[graph[x][i]]
==
false
)
{
DFS(graph[x][i]);
}
}
}
然而這種算法存在弊端,就是需要存儲所有的邊信息,當(dāng)邊信息足夠多時,存儲數(shù)組graph[][]、num[]和flag[]的開銷是很大的。第二種基于并查集的方法則解決了這個弊端,關(guān)于并查集的內(nèi)容具體可見:
http://m.shnenglu.com/amazon/archive/2009/08/15/93457.html
。對所有的邊信息進(jìn)行并查集處理后,如果該圖是連通圖,那么所有節(jié)點(diǎn)的根節(jié)點(diǎn)指針都指向同一個點(diǎn)。
代碼如下:
a
=
Find(record[
0
]);
for
(j
=
1
; j
<
num_record; j
++
)
{
if
(a
!=
Find(record[j]))
{
printf(
"
The door cannot be opened.\n
"
);
break
;
}
}
2.求割點(diǎn)的算法
首先必須保證,
所求的圖是連通圖,不連通的圖沒有割點(diǎn)
。
該算法依然基于BFS,按照標(biāo)號值大小依次將圖中的頂點(diǎn)隱去,對剩下的所有節(jié)點(diǎn)進(jìn)行先深搜索,根據(jù)搜索子樹的數(shù)目即可知道隱去的節(jié)點(diǎn)是否割點(diǎn)(數(shù)目為1,非割點(diǎn);數(shù)目為2以上,割點(diǎn)),并可根據(jù)子樹的數(shù)目知道刪除該割點(diǎn)后連通子圖的數(shù)目。
代碼如下:
jump
=
false
;
for
(i
=
1
; i
<=
nodeNum; i
++
)
{
subnetNum
=
0
;
HowMuch(i, subnetNum);
if
(subnetNum
!=
1
)
{
printf(
"
%d是割點(diǎn),刪除后有%d個連通子圖\n
"
, i, subnetNum);
jump
=
true
;
}
}
if
(jump
==
false
)
{
printf(
"
不是割點(diǎn)\n
"
);
}
//
DFS算法
void
DFS(
int
x)
{
int
i;
flag[x]
=
true
;
for
(i
=
0
; i
<
num[x]; i
++
)
{
if
(flag[graph[x][i]]
==
false
)
{
DFS(graph[x][i]);
}
}
}
//
判斷是否割點(diǎn)
void
HowMuch(
int
x,
int
&
subnetNum)
{
int
i;
memset(flag,
0
,
sizeof
(flag));
flag[x]
=
true
;
for
(i
=
1
; i
<=
nodeNum; i
++
)
{
if
(flag[i]
==
false
)
{
subnetNum
++
;
DFS(i);
}
}
}
發(fā)表于 2009-08-17 19:24
遠(yuǎn)風(fēng)
閱讀(2870)
評論(0)
編輯
收藏
引用
所屬分類:
數(shù)據(jù)結(jié)構(gòu) / 算法
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
數(shù)的整除特征【轉(zhuǎn)載】
判斷圖連通&求割點(diǎn)的算法
并查集學(xué)習(xí)小結(jié)
判斷回文素數(shù)的方法
判斷素數(shù)的算法
Dijkstra算法
AVL樹總結(jié)
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
<
2009年12月
>
日
一
二
三
四
五
六
29
30
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
8
9
留言簿
(3)
給我留言
查看公開留言
查看私人留言
隨筆分類
(93)
ACM(5)
(rss)
C/C++基礎(chǔ)(20)
(rss)
Linux編程(16)
(rss)
MFC(7)
(rss)
MySQL(2)
(rss)
OPNET仿真(11)
(rss)
PHP(13)
(rss)
Python(3)
(rss)
STL(4)
(rss)
Web技術(shù)(2)
(rss)
Windows管理(3)
(rss)
數(shù)據(jù)結(jié)構(gòu) / 算法(7)
(rss)
收藏夾
(2)
C/C++基礎(chǔ)(1)
(rss)
數(shù)據(jù)結(jié)構(gòu) / 算法(1)
(rss)
搜索
積分與排名
積分 - 330940
排名 - 73
最新評論
1.?re: makefile和make規(guī)則
可以評論么
--馮智浩
2.?re: PHP調(diào)用外部程序的方法
大的as打算阿達(dá)的
--碩大的
3.?re: LIB和DLL的區(qū)別與使用
太贊,收藏一下,謝謝
--mymimi1988
4.?re: LIB和DLL的區(qū)別與使用
好文,好內(nèi)容;
--wsdxyz
5.?re: LIB和DLL的區(qū)別與使用
寫的非常詳細(xì),感謝。
--Forward
6.?re: LIB和DLL的區(qū)別與使用
非常好,說得很詳細(xì),也很明白,學(xué)習(xí)了!
--xihuwuyu
7.?re: LIB和DLL的區(qū)別與使用
感覺很好,對于才接觸dll的我來說很夠用。。
--Chosan
8.?re: VC中ListCtrl經(jīng)驗(yàn)總結(jié)【轉(zhuǎn)載】[未登錄]
總結(jié)的很好啊,轉(zhuǎn)了
--king
9.?re: LIB和DLL的區(qū)別與使用
就我自己沒看太懂嗎
--AzzStyle
10.?re: LIB和DLL的區(qū)別與使用
通俗易懂,呵
--我的
閱讀排行榜
1.?LIB和DLL的區(qū)別與使用(76570)
2.?虛擬機(jī)VMware tools安裝【轉(zhuǎn)載】(36589)
3.?Linux串口編程(24897)
4.?tar命令的C參數(shù)(18909)
5.?判斷素數(shù)的算法(11434)
6.?VC中ListCtrl經(jīng)驗(yàn)總結(jié)【轉(zhuǎn)載】(11322)
7.?PHP調(diào)用外部程序的方法(11102)
8.?makefile和make規(guī)則(9219)
9.?C++進(jìn)階必讀書籍【轉(zhuǎn)載】(8438)
10.?insert時出現(xiàn)主鍵沖突的處理方法【轉(zhuǎn)載】(8256)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 遠(yuǎn)風(fēng)
久久这里有精品视频
|
久久久这里只有精品加勒比
|
色婷婷久久综合中文久久蜜桃av
|
精品久久久久久中文字幕大豆网
|
色综合久久久久久久久五月
|
亚洲国产综合久久天堂
|
伊人色综合久久天天人手人婷
|
日韩人妻无码一区二区三区久久
|
精品久久久久久无码专区
|
国产精品久久久99
|
久久久www免费人成精品
|
999久久久无码国产精品
|
亚洲äv永久无码精品天堂久久
|
日批日出水久久亚洲精品tv
|
精品久久久中文字幕人妻
|
久久国产精品视频
|
国产精品99久久免费观看
|
久久亚洲国产精品成人AV秋霞
|
亚洲另类欧美综合久久图片区
|
色综合久久无码五十路人妻
|
欧美日韩中文字幕久久久不卡
|
日韩久久久久久中文人妻
|
色综合久久中文色婷婷
|
亚洲AV无码久久
|
2020久久精品亚洲热综合一本
|
99精品久久久久久久婷婷
|
无码超乳爆乳中文字幕久久
|
久久久久久精品免费免费自慰
|
久久99久久成人免费播放
|
久久精品国产99国产精偷
|
欧美噜噜久久久XXX
|
亚洲午夜久久久久久久久电影网
|
久久夜色精品国产
|
女同久久
|
国产99久久久国产精品小说
|
久久中文字幕视频、最近更新
|
精品久久久久久无码人妻热
|
久久久久亚洲AV成人网人人软件
|
国产福利电影一区二区三区久久老子无码午夜伦不
|
亚洲国产精品综合久久一线
|
狠狠色伊人久久精品综合网
|