问答详情
源自:3-5 图的编码实战-图的深度优先遍历

为什么在深度优先遍历函数刚开始时就判断m_pNode[NodeIndex]是不是已经访问过会导致内存错误?

void CMap::DepthFirstTraversal(int NodeIndex)
{
	if (m_pNode[NodeIndex].m_bIsVisited == false)
	{
		cout << m_pNode[NodeIndex].m_iData << " ";
	}
	m_pNode[NodeIndex].m_bIsVisited = true;
	for (int i = 0; i <m_iCapacity;i++)
	{
		if (1==GetvalueOfMatrix(NodeIndex, i))
		{	
			
			
				DepthFirstTraversal(i);
			
			
		}
		
	}
	
}
上面这种写法就会导致内存错误
void CMap::DepthFirstTraversal(int NodeIndex)
{
	
	cout << m_pNode[NodeIndex].m_iData << " ";
	m_pNode[NodeIndex].m_bIsVisited = true;
	for (int i = 0; i <m_iCapacity;i++)
	{
		if (1==GetvalueOfMatrix(NodeIndex, i))
		{	
			
			if (m_pNode[i].m_bIsVisited == false)
			{
				DepthFirstTraversal(i);
			}
				
			
			
		}
		
	}
	
}
而这种写法就是正确的呢,按理来说,在递归前跟递归后判断是没啥区别的啊


提问者:sodo0 2017-04-09 22:20

个回答

  • cairunbo
    2017-04-11 16:56:46

    朋友,实测你的代码没问题啊!