C 試基於圖的深度優先搜尋策略寫一演算法 判別以鄰接表方式儲存的有向圖中是否存在由頂點 vi到頂點 vj的路徑 i≠j 。
阿新 • • 發佈:2018-12-18
嚴蔚敏 資料結構 7.22
給大佬跪了,這個是要返回的,但是還要兼顧頂點上連線的其他節點,不能一個不行就不行,所以走的路徑只返回走通的,走不通的略過,直到最後,能走到最後就說明根本沒有通的路徑,就這樣。
也可以把這個點上的所有連線點用深度遍歷走一次,然後看看記錄是否點亮的數組裡是不是亮著的,亮著就說明是有路徑,不亮就沒有
這裡鄰接表相關
//是否存在src到dest的路徑
bool isExitedPathDFS(Graph G,int src, int dest){
int a;
EdgeNode *p;
//如果相同就返回真
if(src == dest) {
return true;
}
//既然不同走這裡,點亮第src元素
visited[src] = true;
p = G.adjlist[src].firstedge;
//用一個for迴圈來遍歷鄰接表上所有連著src元素的點
for (; p; p = p->next) {
a = p->adj_vex_index;
//因為要將每一個結果都要返回,
//如果只是冒然返回isExitedPathDFS的結果,那有一條走不通就都走不同了
//所以這裡答案巧妙地做成在if語句裡走這個結果,而且只需要對的結果,錯誤的一律不反回
if(!visited[a] && isExitedPathDFS(G, a, dest)) {
return true;
}
// if(!visited[a]){
// if(isExitedPathDFS(G, a, dest)){
// return true;
// }
// }
}
//執行到了最後就說明真沒有
return false;
}
答案是怎麼想的?服氣