案例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 重複...