[演算法] [C++ / Python] 深度優先搜尋Depth-First-Search - Part I
文章推薦指數: 80 %
更新:熱騰騰的Part II 出爐囉! 深度優先搜尋,Depth-First-Search,簡稱DFS,是一種用於圖或樹的遍歷、搜尋演算法。
樹. 我們先畫一棵樹如下:.
跳到主要內容
[演算法][C++/Python]深度優先搜尋Depth-First-Search-PartI
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
6月17,2017
更新:熱騰騰的PartII出爐囉!
深度優先搜尋,Depth-First-Search,簡稱DFS,是一種用於圖或樹的遍歷、搜尋演算法。
樹
我們先畫一棵樹如下:
是不是很繽紛呢(X畫完樹之後,我們要選一個「起點」,在這裡我們選紅色的 1。
接下來我們可以看到,有三個節點與1相連,分別是 2 , 3 , 4 。
接下來就是DFS的精華:先選一個節點「深」入研究,於是在這裡我們先選2來進行下一步。
選2之後呢?我們會把 2 當作新的起點,再做一次DFS,因此我們找到了 5 。
糟了,以5為起點的話就找不到任何的節點了,這樣就結束了嗎?當然不是,這種情況下我們要返回到上一個節點,也就是2,看看有沒有還沒去過的節點。
--也沒有,我們只好再回到1,有了!剛剛先被我們放到一邊的3和4,於是我們選擇 3 作為我們新DFS的起點。
啊糟糕,原來3下面也沒有其他節點了XD
我們只好回到1,去尋求4的幫助(?),我們以 4 為起點進行DFS,發現有 6 跟 7 兩個節點;依據DFS的原則,先訪問其中一個,在這裡選6,接著回到4,再走到7。
因為7後面沒有節點了,所以回到4,再回到1,結果發現1也沒了,因此,DFS到此全部完畢。
程式碼實作-C++
voiddfs(Node*start){
if(start==nullptr){//如果這個位置沒有節點
return;//返回上一個
}
cout<
預設參數 一般的定義方法就不多說了,直接來看有預設值的參數:defplus(a,b,c=None):res=a+b+(cifcelse0)returnres 預設參數的用處通常是實作函式重載用的,可以使一個函式在接受引數時更有彈性,而要注意的語法問題是:預設參數在函式定義時一定要放在非預設參數的後面。
但如果我們想實作無限版的plus()函式呢?總不可能一直增加預設參數吧! 這時候我們可以用「*」來將引數收集到一個tuple中。
*-收集至Tuple 先來看看範例:defplus(*nums):res=0foriinnums:res+=ireturnres 透過*收集的引數會被放到一個tuple中,所以我們可以使用for來對它進行迭代。
這樣就可以理解為什麼要使用*args這個參數了,但是**kwargs又是什麼呢?我們要先從關鍵字引數來說起:關鍵字引數KeywordArgument 在呼叫print()時,我們有時會指定sep參數做為分隔輸出的字元,或是使用end參數來更改最後的換行字元。
像這樣不用理會參數的真正順序,而只要給定名字然後指定值的情況,就是在使用關鍵字引數。
如果我們要指定的參數太多而造成版面不簡潔的話,可以考慮使用「**」來拆解一個裝有參數名與值的dict。
**第一招-拆解Dict 原諒我使用這麼中二的小標題XDD 直接看實例應該就能懂了:dt={'sep':'#','end':'\n\n'}print('hello','world',**dt)#等同於print('hello','world',sep='#',end=&
繼續閱讀
[C]每天來點字串用法(5)-strcat()、strncat()
2月24,2018
好的,不知道又過了幾天(廢),終於要來到第5篇了。
strcat()、strncat():串接字串 所屬標頭檔:
strcat()有兩個參數,分別是dest和src,而這個函式的功用是將src接到dest後面,再回傳dest指向的字串。
那你可能會問:那原本dest的'\0'字元會跑去哪呢?答案是會被src的第一個字元(也就是src[0])所取代,並在最後面補上一個'\0'來當做新字串的結束字元。
看到名字多了一個n的函式,你可能會猜,是不是這個strcat()也會造成緩衝區溢位的問題呢?沒錯,所以接下來要介紹比較推薦的函式:strncat()。
如果有看過之前那一篇的話,應該都已經知道這個函式要怎麼用了,他會多接受一個整數,作為控制最多串接的字元數。
不過這裡的機制跟strcpy()有點不一樣: 1)無論如何都會在最後放一個'\0',而這個'\0'並不受count的限制。
也就是說,真正串接字元數的最大值其實是count +1。
讓我們來看看他們的使用範例:#include
延伸文章資訊
- 1【Day33】[演算法]-深度優先搜尋DFS與廣度優先搜尋BFS
深度優先搜尋DFS ... 先選定一個頂點開始走訪,接著從此頂點相鄰未被走過的頂點中,擇一走訪標示為記錄點,以此類推,不斷從新記錄點的相鄰未被走過頂點中 ...
- 2Depth-first search 深度優先搜尋法
Depth-first search (DFS) is an algorithm for traversing or searching a tree, ... 深度優先搜尋法,是一種用來遍尋一...
- 3深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法 - MagicLen
- 4[演算法] [C++ / Python] 深度優先搜尋Depth-First-Search - Part I
更新:熱騰騰的Part II 出爐囉! 深度優先搜尋,Depth-First-Search,簡稱DFS,是一種用於圖或樹的遍歷、搜尋演算法。 樹. 我們先畫一棵樹如下:.
- 5Graph: Depth-First Search(DFS,深度優先搜尋)
演算法