簡體   English   中英

鄰接矩陣表示的圖是否至少有一棵生成樹?

[英]Has graph represented by adjacency matrix at least one spanning tree?

我從兩天開始就在學習數學和算法,但我沒有更多的想法。 我有鄰接矩陣,我有 laplasjan 矩陣。 我想檢查這個圖是否一致或它是否有生成樹。

我正在使用基爾霍夫定理,它對我有用,但它太慢了(10x10 矩陣超過秒)。 我可以修改基爾霍夫定理來檢查我的矩陣生成樹(不是多少)嗎?

我正在嘗試學習新東西,所以我不想使用 DFS,我真的想使用鄰接矩陣。

這是一種找出圖是否至少有一個生成樹的算法。

  • 我們將生成樹表示為一個數組“par”,其中每個節點都指向樹中的父節點。
  • 'par' 初始化為所有節點都將自己作為父節點。
  • 我們有一個函數find_root ,它遵循一連串“par”指針,直到它到達par[node] == node
  • 我們遍歷所有鏈接; 在一個簡單的鄰接矩陣中,這將是: for i in nodes: for j in nodes: if i!=j: if adjacent[i][j] thenfor i in nodes: for j in nodes: if i!=j: if adjacent[i][j] then
    • k = find_root(i)
    • `l = find_root(j)
    • par[k] = l // 這將 i 的樹作為 j 樹中 j 的兄弟
    • 最后,我們檢查每個節點是否具有相同的根

這樣,就構建了一棵或多棵樹。 這些樹可用於將節點聚集成連接的組。

對於基本算法,一個重要的加速是不僅設置par[k] = l還設置par[i] = lpar[j] = l 下次會更早找到根。 如果圖沒有方向性,則只需要處理adjacent[i][j]adjacent[j][i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM