深度优先遍历解答
void CMap::depthFirstTraverse(int nodeIndex) {int val=1; cout<<m_pNodeArr[nodeIndex].m_cData<<" "; m_pNodeArr[nodeIndex].m_bIsVisited=true; for (int i=0; i<m_iCapacity;i++) { if(getValFromMatrix(nodeIndex,i, &val)) { if (val==1 && m_pNode[i].m_bIsVisited==false) { depthFirstTraverse(i); } } } }
首先要知道nodeIndex 指的是行数,也就是row(0~capacity)。这一点从
getValFromMatrix(nodeIndex,i, &val)函数的声明可以看出来。且初始的nodeIndex值应该为0,从A节点开始寻找其有连接的点, 再从其有连接的点找其他有连接的点,依次下去,找到后就打印,并置为true(已经被遍历)。
其次,还要对getValFromMatrix(nodeIndex,i, &val)函数的返回作判断,返回为true则表示引用val的值发生了赋值(改变), 从而能知晓该节点是否与i有连接。老师呢,没有对getValFromMatrix(nodeIndex,i, &val)函数 的返回作判断,这一点大家要注意。同时也要注意,val必须要引用传值,这样在getValFromMatrix(nodeIndex,i, &val)函数执行 完后,val的值才会反映出是否有连接(即1 有,0 无) 最后,可以把几个判断条件并列,像在下所写的上述代码那样,可以省去一些工作