數(shù)據(jù)結構拓展習題:圖判斷是否存在長度為k的簡單路徑
題目:采用鏈接表存儲結構,編寫一個判別無向圖中任意給定的兩個頂點之間是否存在一條長度為k的簡單路徑。



bool visited[MAX_VERTEX_NUM];
bool ExitPath(ALGraph G, int u, int v, int length)
/*判斷圖G中從u頂點到v頂點是否存在長度為length的路徑*/
{
?????? if (length < 0)//路徑為負顯然不成立
????????????? return false;
?????? if (u == v && length == 0)//遞歸終止條件
????????????? return true;
?????? visited[u] = true;
?????? ArcNode* p;
?????? /*尋找u的鄰接點是否存在到v的長度為length-1的路徑*/
?????? for (p = G.vertices[u].firstarc; p != NULL; p = p->nextarc)
?????? {
????????????? if (!visited[p->adjvex])
???????????????????? if (ExitPath(G, p->adjvex, v, length - 1))
??????????????????????????? return 1;
?????? }
?????? /*如果沿某個方向不存在長度為length的路徑
?????? 沿這個方向經(jīng)過的頂點仍可能存在于沿其他方向的目標路徑中
因此要恢復成未訪問*/
?????? visited[u] = false;
?????? return false;
}
標簽: