首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

圖論:鄰接矩陣直接實現 DFS,無需轉換鄰接表

     編輯:程式設計疑難解答

結論

鄰接矩陣完全可以直接進行深度優先搜索(DFS),無需轉換為鄰接表。兩種存儲結構均可實現圖遍歷,只是時空複雜度不同。

鄰接矩陣 DFS 代碼模板

void dfs_matrix(int u, vector>& adj, vector& vis) {
    vis[u] = true;
    // 處理節點 u
    for (int v = 0; v < adj.size(); ++v) {
        if (adj[u][v] && !vis[v]) { // 邊存在且未訪問
            dfs_matrix(v, adj, vis);
        }
    }
}

複雜度對比

操作鄰接矩陣鄰接表
空間O(V²)O(V+E)
遍歷所有鄰接點O(V)O(deg(u))
判斷邊是否存在O(1)O(deg(u))

選擇建議

  • 稠密圖(E 接近 V²):鄰接矩陣更優,代碼簡潔,常數小。
  • 稀疏圖:鄰接表節省空間,遍歷更快。
  • 競賽/面試:熟練掌握兩種寫法,根據題目數據範圍選擇。

完整示例(最小生成樹 Prim)

鄰接矩陣實現 Prim 算法常作為模板,代碼見原答案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved