DFS是解決此類問題的關鍵。我們可以使用DFS
輕鬆枚舉兩個頂點之間的所有可能路徑,但是我們必須注意距離約束的。
我的算法將遍歷的邊數視爲約束條件。您可以輕鬆將其轉換爲遍歷的節點數。以此作爲練習。
我們記錄變量e
所遍歷的邊的數量。如果e
變得大於K - 2
,我們終止遞歸調用DFS
。我們保留boolean
數組visited
。但是如果遞歸調用在沒有找到成功路徑的情況下終止,我們會放棄對數組visited
所做的任何更改。
只有當遞歸調用DFS
成功找到路徑時,我們纔會爲程序的其餘部分保留visited
數組。
所以對於算法的僞代碼將是:
main function()
{
visited[source] = 1
e = 0//edges traversed so far.
sum = 0// the answer
found = false// found a path.
dfs(source,e)
print sum
.
.
.
}
dfs(source,e)
{
if(e > max_distance)
{
return
}
if(e <= max_distance and v == destination)
{
found = true
sum++
return
}
for all unvisited neighbouring vertices X of v
{
if(found and v != source)
return;
if(found and v == source)
{
found = false
visited[destination] = 0
}
visited[X] = 1
dfs(X , e + 1)
if(!found)
visited[X] = 1
}
}
隨意對任何查詢。 –