Acme Design is a full service design agency.

圖的連通性

Sarah Levin, CEO

無向圖 DFS 樹

這是一張無向圖

0

1

2

3

4

5

6

7

8

將其DFS的過程化為樹後

發現邊可以區分為兩種

0

1

2

3

4

5

6

7

8

樹邊 Tree edge (由父親連到小孩)

回邊 Back edge(由子孫連到祖先)

觀察:

拔掉那些點後會使此圖不連通?

拔掉那些邊後會使此圖不連通?

0

1

2

3

4

5

6

7

8

關節點/割點

共通特徵:

其子孫沒有除了經過此點外到達祖先的方法,此點為關節點

特例:

根節點的情況呢?

我們定義
low[v] 為不經過其父節點能抵達的最淺深度

dis[v] 為此節點的深度

 low[v] >= depth[v] 時,就是關節點了!

實際跑一次(白板)

如何找?

示範

void dfs(int v, int par)
{
	int child_cnt = 0;
	visited[v] = 1;
    if (v != par) low[v] = dis[par]+1;
    dis[v] = dis[par]+1;
    for (int u: adj[v])
    {
    	if (!visited[u])
        {
        	child_cnt++;
        	dfs(u, v);
            low[v] = min(low[v], low[u]);
            if (low[u] >= dis[v] && par != -1 )
            	// v 是割點
        }
        else if (dis[u] < dis[v] )
        	low[v] = min(dis[u], low[v]);
    }
    if (par == -1 && child_cnt > 1)
    	//v 是割點 (根節點的特判情形)
}

0

1

2

3

4

5

6

7

8

共通特徵:

對於點u及其子孫v,若v的子樹中,

不存在回邊到達u或者u的祖先,此條邊為橋

Made with Slides.com