在對無向圖進(jìn)行遍歷時,對于連通圖,僅需從圖中任一頂點出發(fā),進(jìn)行深度優(yōu)先搜索或廣度優(yōu)先搜索,便可訪問到圖中所有頂點。對于非連通圖,則需從多個頂點出發(fā)進(jìn)行搜索,而每一次從一個新的起始點出發(fā)進(jìn)行搜索的過程中得到的頂點訪問序列恰為其各個連通分量中的頂點集。
對于非連通圖,每個連通分量中的頂點集,和遍歷時走過的邊一起構(gòu)成若干棵生成樹,這些連通分量的生成樹組成非連通圖的生成森林。
假設(shè)以孩子兄弟鏈表作為生成森林的存儲結(jié)構(gòu),則生成非連通圖的深度優(yōu)先生成森林的算法可以描述如下:
而建立以p為根的深度優(yōu)先生成樹的算法可以描述如下:
在本題中,讀入一個無向圖的鄰接矩陣(即數(shù)組表示),建立無向圖并按照以上描述中的算法建立無向圖的生成森林。對于森林中的每一棵生成樹,遍歷所有頂點,并輸出遍歷頂點的順序。