圖的 DFS 類似二元樹,從起始頂點出發,遞迴訪問未訪問過的鄰接點,直到所有頂點被訪問。

以 V1 為起點,訪問序列:V1 → V2 → V4 → V8 → V5 → V6 → V3 → V7
public void DFSTraverse() // 深度優先遍歷
{
InitVisited(); // 重設 visited 標記
DFS(items[0]); // 從第一個頂點開始
}
private void DFS(Vertex<T> v)
{
v.visited = true;
Console.Write(v.data + " ");
Node node = v.firstEdge;
while (node != null)
{
if (!node.adjvex.visited)
DFS(node.adjvex); // 遞迴
node = node.next;
}
}
private void InitVisited()
{
foreach (Vertex<T> v in items) v.visited = false;
}
var a = new AdjacencyList<string>();
a.AddVertex("V1"); ... a.AddVertex("V8");
a.AddEdge("V1", "V2"); ... a.AddEdge("V7", "V8");
a.DFSTraverse();
// 輸出: V1 V2 V4 V8 V5 V6 V3 V7