1. 程式人生 > 其它 >關於 dfs深度優先搜尋

關於 dfs深度優先搜尋

·dfs是什麼

 dfs是一個針對圖和樹的遍歷演算法

·dfs的原理

 dfs是由棧的形式實現的,通過棧進行路徑儲存

·dfs的注意事項

 1 剪枝 剪枝是為了減少時間成本

 2 回溯 回溯回到原來路徑

 3 還原 回到原來路徑時,要還原現場

·dfs的思想

 假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然後依次從它的各個未被訪問的鄰接點出發深度優先搜尋遍歷圖,直至圖中  所有和v有路徑相通的頂點都被訪問到。 若此時尚有其他頂點未被訪問到,則另選一個未被訪問的頂點作起始點,重複上述過程,直至圖中所有頂點都被訪問到為止。

·dfs的特點

 選定一個出發點後進行遍歷,能前進則前進,若不能前進,回退一步再前進,或再回退一步後繼續前進。依此重複,直到所有與選定點相通的所有頂點都被遍歷。

·顯然,dfs是一個遞迴的過程

 

//遍歷圖上所有節點
Dfs(V)
{
    if(V是舊節點)
        return;
    else
    {
        將V標記為舊點;
        對和V相鄰的每個節點U
        {
            Dfs(U);
        }
    }
}
int main()
{
    將所有點標記為新點;
    while(在圖中能找到新點k)
        Dfs(k);
}

//在圖上尋找路徑
bool Dfs(V)
{
    if(V為終點)
        return true;
    if(V為舊點)
        
return false; 將V標記為舊點; 對和V相鄰的每個節點U { if(Dfs(U)==true) return true; } return false; }