1. 程式人生 > >tarjan算法與無向圖連通性

tarjan算法與無向圖連通性

是否 img 搜索 時間 bsp 斷點 技術 代碼 割點

一,無向圖的割點與橋

對於G=(V,E)

1.割點:xξV若刪除x以及與x所連邊後,圖被分裂成為多個聯通圖,則x為圖的割點

2.橋(割邊):eξE若刪除e後圖,圖被分裂成為多個聯通圖,則e為圖的割點

怎樣求割點與割邊

tarjan算法

技術分享圖片

就是他了。。。

首先我們引入時間戳的概念

設dfsn[x]表示從源節點Y開始訪問到的第幾個

也就是說我們假設dfsn[Y]=1,然後我們采用深度優先搜索樹對圖進行訪問

依次對圖的訪問次序進行標記

如圖:

技術分享圖片

圖中紅色數字左表示low[x]值,右表示dfsn[x]值

什麽是low[x],值呢?

我們定義low[x]表示x通過它的子樹所能到達的最早編號的節點的編號

如何更新low[x]值?

我們在dfs過程中,先讓low[x]=dfsn[x]

有定義可知,設y為x子節點,則low[x]=min(low[x],low[y]);

如圖,我們會發現節點5可以不通過它的父節點而到達節點1

所以,同樣low[x]=min(low[x],dfsn[y])

怎樣判斷點是否為割點?

dfsn[x]<=low[x]

怎樣判斷邊是否為割邊?

dfsn[x]<low[y]

(x,y)為割邊

割點代碼

tarjan算法與無向圖連通性