1. 程式人生 > >算法導論習題 通用匯點

算法導論習題 通用匯點

sink span 可能 != 算法導論 導論 行號 所有 表示

來自習題22.1-6

給出O(V)時間算法判斷有向圖G是否存在一個通用匯點(universal sink)。通用匯點指的是入度為|V|-1,出度為0的節點。

思路:

考慮圖的鄰接矩陣A,假設i為通用匯點,則對於0<=j<n,有A[i][j]=0,且對於所有0<=k<n and k != i,有A[k][i] = 1,註意這裏k!=i

相當於在子矩陣A[0..i][0..i]的右邊和下邊造了一個圍墻,最下邊全是0,最右邊除了右下角外全是1

那麽可以令遊標從矩陣左上角開始,遇1向下,逢0向右,直到行或列超出矩陣A的界限,註意不是子矩陣。此時若遊標所在行沒有超出界限,那和這個行號 r 就可能是通用匯點編號。

接下來再根據定義驗證 r 是否就是通用匯點。因為可能存在以下的情況:

x x x x 1 x x x
x x x x 1 x x x
x x x x 1 x x x
x x x x 1 x x x
0 0 0 0 0 0 0 0
x x x x 0 x x x
x x x x 0 x x x
x x x x 0 x x x

矩陣第5行所表示的節點顯然不是通用匯點。

算法導論習題 通用匯點