深度優(yōu)先遍歷解答
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 指的是行數(shù),也就是row(0~capacity)。這一點從
getValFromMatrix(nodeIndex,i,?&val)函數(shù)的聲明可以看出來。且初始的nodeIndex值應(yīng)該為0,從A節(jié)點開始尋找其有連接的點, 再從其有連接的點找其他有連接的點,依次下去,找到后就打印,并置為true(已經(jīng)被遍歷)。
其次,還要對getValFromMatrix(nodeIndex,i,?&val)函數(shù)的返回作判斷,返回為true則表示引用val的值發(fā)生了賦值(改變), 從而能知曉該節(jié)點是否與i有連接。老師呢,沒有對getValFromMatrix(nodeIndex,i,?&val)函數(shù) 的返回作判斷,這一點大家要注意。同時也要注意,val必須要引用傳值,這樣在getValFromMatrix(nodeIndex,i,?&val)函數(shù)執(zhí)行 完后,val的值才會反映出是否有連接(即1?有,0?無) 最后,可以把幾個判斷條件并列,像在下所寫的上述代碼那樣,可以省去一些工作
2020-01-22
111