本网站有许多关于我的问题的文章。 我有一个矩阵例如(10 x 10),代表10个节点。称为MyMat的矩阵(9,9)如何在visual basic中删除图形中的循环或循环?
此矩阵的行表示源节点(来自节点),列表示目标节点(去节点)。它有14个随机分布的链接。非零值表示节点之间的连接。
0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0
我想要的是防止系统中每个节点的循环(循环)。例如: 节点1:没有回路
节点2:2,9,7,8,10,2.这里存在循环,因为它以2开始并以2结束。我想要防止循环在这个网络。这意味着:MyMat(9,1)必须为0 节点2:2,9,7,8,10,3,2.这意味着MyMat(2,1)必须为0
节点3:否环
节点4:4,7,8,4。这意味着MyMat(7,3)必须为0
节点5:5,8,10,6,5这意味着,MyMat( 5,4)必须为0
节点6:无环路
节点7:无环
节点8:无环路
节点9:无环路
节点10:无环
4连接,从上述矩阵中删除。
我已经通过一种称为深度优先搜索的技术做到了这一点,但它非常缓慢并且加重了我程序的运行时间,尤其是当我使用60个节点和100个连接时! 几个编程示例可以找到,如果你谷歌它。
有没有更容易(更快)的方式在Visual Basic或C#中做到这一点?
HI 感谢您的回复。 您能否用我的例子来证明您的答案?即使用我在问题中描述的边和节点矩阵。 感谢 – 2010-08-15 15:43:31
我试过,但没有成功,请指教 LinkToSource(0) GreyList.Add(0) 公共职能LinkToSource(BYVAL FROMNODE作为整数)为双 对于i = 0到9 如果马特(FROMNODE,I)> 0,则 如果GreyList.Contains(I)然后 如果不BlackList.Contains(ⅰ)接着 马特(FROMNODE,I)= 0 BlackList.Add(ⅰ) BlackList.Add(FROMNODE) End If Else GreyList.Add(i) LinkToS wece(i) End If End If Next i End Function – 2010-08-16 18:52:14