2014-02-22 84 views
0

我正在寫在MATLAB最低-的有序度,這就需要使用圖形的實現。我實現這個算法的第一個想法是將圖中的每個頂點表示爲一個對象,並將鄰接列表作爲每個頂點的屬性。這使我以下的問題:實現圖形(如在圖論)在Matlab

1)如何我可以跟蹤其他頂點對象的任何特定頂點對象中?如同,如果我想保留一個相鄰頂點的列表,我怎樣才能在另一個頂點的列表中引用它們?如何刪除頂點時更新每個列表?

2)我怎樣才能完全刪除對象?

我熟悉OOP的基本知識,但是這將是我在使用它來實現在任何語言的任何東西的第一次嘗試,所以我試圖找出實現這種算法的細節。

+0

MATLAB使用稀疏布爾矩陣來表示平面圖。 –

+0

凱文·墨菲的圖論工具箱可能實現,如果沒有它可能給你的怎麼能代表你的圖形更好的主意。 http://www.cs.ubc.ca/~murphyk/Software/ – jerad

回答

0

對於基於圖形的東西,我已經做了,我發現它足以只需使用一個N×N的鄰接矩陣,其中mat(i,j)是從頂點i邊緣到頂點j重量。如有必要,頂點屬性並排放置在1xN向量/單元陣列/結構數組中。

頂點相鄰頂點的索引i來自find(mat(i,:))find(mat(:,i))取決於邊緣方向(顯然,如果權重可以爲零,則需要單獨的權重和鄰接矩陣)。缺失的情況:

mat(:,i) = []; 
mat(i,:) = []; 
vec(i) = []; % if necessary 

我不會說這是一個特別普遍的解決方案,但在相對小圖的遍歷算法(通常爲100-200頂點)它運作良好,並保持代碼簡單好用。使用稀疏矩陣可能有助於解決更大的問題。如果你想將實現從代碼的其餘部分抽象出來,將它包含在一個具有適當訪問器方法的對象中應該是相當簡單的 - 個人而言,我從來沒有發現需要。