在Matlab中实现图形(如图论)

时间:2014-02-22 20:13:59

标签: algorithm matlab graph linear

我正在编写MATLAB中的最小度排序实现,这需要使用图形。我实现这个算法的第一个想法是将图中的每个顶点表示为一个对象,并将邻接列表保持为每个顶点的属性。这引出了以下问题:

1)如何跟踪任何特定顶点对象中的其他顶点对象?如果我想保留相邻顶点列表,如何在列表中引用它们是另一个顶点的一部分?如何在删除顶点时更新每个列表?

2)如何完全删除对象?

我熟悉OOP的基础知识,但这是我第一次尝试使用它来实现任何语言的任何东西,所以我试图找出实现这种算法的具体细节。

1 个答案:

答案 0 :(得分:0)

对于我已经完成的基于图形的东西,我发现仅使用NxN邻接矩阵就足够了,其中mat(i,j)是从顶点i到顶点{{1}的边的权重}}。如有必要,顶点属性位于1xN向量/单元阵列/结构数组中。

与顶点j相邻的顶点索引来自ifind(mat(i,:)),具体取决于边缘方向(显然,如果权重可以为零,则需要单独的权重和邻接矩阵)。删除是一个案例:

find(mat(:,i))

我不会说这是一个特别通用的解决方案,但对于相对较小的图形(通常为100-200个顶点)的遍历算法,它运行良好并保持代码简洁。使用稀疏矩阵可能有助于扩展到更大的问题。如果要将实现从代码的其余部分抽象出来,将它包装在具有合适访问器方法的对象中应该是非常简单的 - 个人而言,我从未发现需要。