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

图3——搜索之深度优先

Posted on 2010-10-19 22:19  猴王无敌  阅读(140)  评论(0)    收藏  举报

【原理】

STEP1.当前节点A入栈

STEP2.只要栈不为空,则找到栈顶节点有链接的下一个节点,找不到就回退到上一个节点(弹出栈)

...周而复始

【实现】

        public List<CVertex> DeepFirstSearch()
        {
            List<CVertex> lstRes = new List<CVertex>();

            var oStack = new Stack<int>();
            this.m_lstVertex[0].IsVisited = true;
            lstRes.Add(this.m_lstVertex[0]);
            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[iAdjVertexIndex]);
                    oStack.Push(iAdjVertexIndex);
                }
            }

            foreach(var oVertex in this.m_lstVertex)
            {
                oVertex.IsVisited = false;
            }

            return lstRes;
        }