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