博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

图5——最小生成树

Posted on 2010-10-21 23:16  猴王无敌  阅读(155)  评论(0)    收藏  举报

【原理】

使用深度优先、广度优先皆可,只要把所有节点覆盖到就是一个最小生成树了

【实现】

        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;
        }