【原理】
使用深度优先、广度优先皆可,只要把所有节点覆盖到就是一个最小生成树了
【实现】
public List<CVertex> Mst()
{
List<CVertex> lstRes = new List<CVertex>();
var oStack = new Stack<int>();
this.m_lstVertex[0].IsVisited = true;
oStack.Push(0);
int iAdjVertexIndex;
while (oStack.Count > 0)
{
iAdjVertexIndex = _GetAdjUnvisitedVertexIndex(oStack.Peek());
if (-1 == iAdjVertexIndex)
{
oStack.Pop();
}
else
{
this.m_lstVertex[iAdjVertexIndex].IsVisited = true;
lstRes.Add(this.m_lstVertex[oStack.Peek()]);
lstRes.Add(this.m_lstVertex[iAdjVertexIndex]);
oStack.Push(iAdjVertexIndex);
}
}
foreach (var oVertex in this.m_lstVertex)
{
oVertex.IsVisited = false;
}
return lstRes;
}
浙公网安备 33010602011771号