DFS 深度優先搜尋經典案例

2021-09-25 21:25:27 字數 1791 閱讀 5463

案例1力扣:員工重要性

class

solution

//最終返回當前員工和他的下屬的重要度之和

return curimportant;

}public

:int

getimportance

(vector> employees,

int id)

return

dfs(info, id);}

};

案例2:

力扣:影象渲染

class

solution,,

,};//深度優先搜尋

void

dfs(vectorint>>

& image,

int row,

int col, vectorint>>

& book,

int sr,

int sc,

int oldcolor,

int newcolor)}}

vectorint>>

floodfill

(vectorint>>

& image,

int sr,

int sc,

int newcolor)

};

案例3:

力扣:被圍繞的區域

class

solution,,

,};void

dfs(vectorchar

>>

& board,

int row,

int col,

int r,

int c)}}

void

solve

(vectorchar

>>

& board)

//第一行和最後一行

for(

int j =

0; j < col;

++j)

//搜尋完畢,所有被圍繞的o還是o,但是沒有被圍繞的o變為了*

//做最後的調整

for(

int i =

0; i < row;

++i)}}

};

案例4

力扣:島嶼數量

class

solution,,

,};//深度優先搜尋

void

dfs(vectorchar

>>

& grid,

int row,

int col,

int r,

int c)

}int

numislands

(vectorchar

>>

& grid)}}

return ret;}}

;

案例5

力扣:島嶼的最大面積

class

solution,,

,};//深度優先搜尋

intdfs

(vectorint>>

& grid,

int row,

int col,

int r,

int c)

}return ret;

}int

maxareaofisland

(vectorint>>

& grid)}}

return max;}}

;

深度優先搜尋DFS

作為搜尋演算法的一種,dfs對於尋找乙個解的 np 包括npc 問題作用很大。但是,搜尋演算法畢竟是 時間複雜度是o n 的階乘級演算法,它的效率比較低,在資料規模變大時,這種演算法就顯得力不從心了。關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用...

深度優先搜尋 DFS

深度優先搜尋 縮寫dfs 有點類似廣度優先搜尋,也是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v 0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。你可以跳過第二節先看第三節,還是引用上篇文章的樣例...

深度優先搜尋(dfs)

深度優先搜尋的一般步驟 1 從頂點v出發,訪問v。2 找出剛才訪問過的頂點的第乙個未被訪問的鄰接點,訪問該頂點。以該頂點為新頂點,重複此步驟,直到剛訪問的頂點沒有沒有未被訪問過的鄰接點為止。3 返回前乙個訪問過的仍有未被訪問過的鄰接點的頂點,找出該頂點的下乙個未被訪問過的鄰接點,訪問該頂點。4 重複...