寻找所有生成树的算法可以非常复杂,可以找到与此相关的研究论文。如果要追求效率则需要非常复杂的算法。但是本文介绍的是非常简单暴力搜索的方法。想法很简单:如果一个图有n个点,就在这张图的所有m个边中选出n-1条边,再判断这n-1条边和这n个点组成的是不是连通图,如果是连通图,则这n个点和n-1条边组成了一个生成树。
判断连通图算法
网上有什么矩阵幂和warshell算法,warshell算法好像挺高端的,但是网上搜索的大部分代码有问题(除非使用专业函数),在我们要解决的问题里也不需要复杂,从第一个点开始找连通的点,再依次找连通点的联通点,最后要是找到的点的个数就是图中点的个数,就说明是连通图。
current = zeros(1,size);
current(1) = 1;
%这里的mark标记找到了多少点,要是找到就标记为1
mark = zeros(1,size);
mark(1) = 1;
while sum(current) > 0
next = zeros(1,size);
for j = 1:size