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

来源:3-5 图的编码实战-图的深度优先遍历

sodo0

2017-04-09 22:20

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);
			}
				
			
			
		}
		
	}
	
}
而这种写法就是正确的呢,按理来说,在递归前跟递归后判断是没啥区别的啊


写回答 关注

1回答

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

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

    sodo0

    哦,好吧,

    2017-04-12 19:02:35

    共 1 条回复 >

数据结构探险之图篇

图是众多实际问题解决方案之源,从基础概念入手掌握图的处理

56337 学习 · 81 问题

查看课程

相似问题