【原理】
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;
}
浙公网安备 33010602011771号