0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DFS深度優(yōu)先搜索python代碼

冬至子 ? 來源:行在交通 ? 作者:ai聊天機(jī)器人 ? 2022-10-12 10:50 ? 次閱讀

最近在寫分支定界求TSP的一個(gè)小項(xiàng)目,涉及到圖和樹的各種知識(shí),就淺淺的從無向圖的遍歷開始總結(jié)一下近期的學(xué)習(xí)工作,使用DFS的遞歸遍歷無向圖。

鄰接矩陣、鄰接表等都可以用來表示一張圖,這里使用鄰接表數(shù)組來表示,即以頂點(diǎn)為索引的列表數(shù)組,具體實(shí)現(xiàn)使用字典來創(chuàng)建鄰接表數(shù)組。

poYBAGNGKzGACJOcAAAxE4eKOeo310.png

深度優(yōu)先搜索DFS簡(jiǎn)單地來說,就是在訪問其中一個(gè)頂點(diǎn)時(shí),將它標(biāo)記為已訪問,遞歸的訪問它所有沒有被標(biāo)記的相鄰頂點(diǎn)。

老習(xí)慣,上代碼。

poYBAGNGKzyAAuJ7AABb3wOjgys887.png

運(yùn)行看結(jié)果。

poYBAGNGK0yAHvgcAACSUbrIQFo956.png

淺淺的分析一下遞歸的過程

poYBAGNGK1yAai82AACYeBpPqJc420.png

dfs(0) ---dfs(1)---0已經(jīng)被標(biāo)記了,下一個(gè)dfs(3)---1已經(jīng)被標(biāo)記了,所以下一個(gè)dfs(2)---graph[2]里的0,3都被標(biāo)記了,回到graph[3],接著dfs(5)--3已經(jīng)被標(biāo)記了,所以dfs(6)---接下來就簡(jiǎn)單了,dfs(4)。好像就結(jié)束了應(yīng)該是這樣吧。

到這里如果就結(jié)束的話,顯得敷衍,折騰了一下,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單有點(diǎn)笨的s-v的路徑構(gòu)建的功能,還是用上面的例子來說明,最后visited = [0,1,3,2,5,6,4],根據(jù)這個(gè)標(biāo)記順序,會(huì)有且僅有0-1,1-3,3-2,3-5,5-6,6-4被選中(別問為什么,這是我的規(guī)則)。

pYYBAGNGK26AaZN4AAD8oxmDK2k515.png

首先運(yùn)行前面的dfs,得到 visited = [0,1,3,2,5,6,4],根據(jù)這個(gè)標(biāo)記順序,會(huì)有且僅有0-1,1-3,3-2,3-5,5-6,6-4被選中(別問為什么,這是我的規(guī)則)。看第4和5行,將構(gòu)建u-v的路徑轉(zhuǎn)為構(gòu)建v-u的路徑。

會(huì)有人好奇為啥0到5的路徑為啥不是0-3-5這條,因?yàn)?-3沒有被標(biāo)記啊!至于為什么,這就是我的規(guī)則,別管(懂的自然會(huì)懂我的心路歷程,不懂就算,反正構(gòu)建路徑又不對(duì)成本、距離等做要求)。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4761

    瀏覽量

    84316
  • TSP
    TSP
    +關(guān)注

    關(guān)注

    1

    文章

    24

    瀏覽量

    16884
  • DFS
    DFS
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    9147
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    pytorch和python的關(guān)系是什么

    ,PyTorch已經(jīng)成為了一個(gè)非常受歡迎的框架。本文將介紹PyTorch和Python之間的關(guān)系,以及它們?cè)?b class='flag-5'>深度學(xué)習(xí)領(lǐng)域的應(yīng)用。 Python簡(jiǎn)介 Python是一種高級(jí)、解釋型、通用
    的頭像 發(fā)表于 08-01 15:27 ?1297次閱讀

    基于Python深度學(xué)習(xí)人臉識(shí)別方法

    基于Python深度學(xué)習(xí)人臉識(shí)別方法是一個(gè)涉及多個(gè)技術(shù)領(lǐng)域的復(fù)雜話題,包括計(jì)算機(jī)視覺、深度學(xué)習(xí)、以及圖像處理等。在這里,我將概述一個(gè)基本的流程,包括數(shù)據(jù)準(zhǔn)備、模型選擇、訓(xùn)練過程、以及測(cè)試與評(píng)估,并附上簡(jiǎn)單的
    的頭像 發(fā)表于 07-14 11:52 ?1072次閱讀

    深度學(xué)習(xí)常用的Python

    深度學(xué)習(xí)作為人工智能的一個(gè)重要分支,通過模擬人類大腦中的神經(jīng)網(wǎng)絡(luò)來解決復(fù)雜問題。Python作為一種流行的編程語言,憑借其簡(jiǎn)潔的語法和豐富的庫支持,成為了深度學(xué)習(xí)研究和應(yīng)用的首選工具。本文將深入探討
    的頭像 發(fā)表于 07-03 16:04 ?486次閱讀

    Python智能家居系統(tǒng)代碼介紹

    Python智能家居系統(tǒng)是一種基于Python編程語言開發(fā)的智能家居控制系統(tǒng),在現(xiàn)代家庭中得到了越來越廣泛的應(yīng)用。本文將詳細(xì)介紹Python智能家居系統(tǒng)的代碼實(shí)現(xiàn),包括系統(tǒng)的結(jié)構(gòu)與功能
    的頭像 發(fā)表于 01-25 09:46 ?1180次閱讀

    python中運(yùn)算符的優(yōu)先級(jí)大小

    Python中運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中各個(gè)運(yùn)算符的計(jì)算順序。了解運(yùn)算符的優(yōu)先級(jí)對(duì)于正確理解和編寫復(fù)雜的表達(dá)式非常重要。本文將詳細(xì)介紹Python中運(yùn)算符的
    的頭像 發(fā)表于 11-29 16:21 ?2739次閱讀

    python軟件IDLE怎么打多行代碼

    用于編寫、編輯和運(yùn)行Python代碼的編輯器窗口。在IDLE中編寫多行代碼有幾種方法可以實(shí)現(xiàn)。 使用括號(hào)與換行符: 在IDLE中編寫多行代碼的一種常見方法是使用括號(hào)來將多行
    的頭像 發(fā)表于 11-29 15:00 ?3680次閱讀

    python shell怎么用

    Python Shell是一種交互式解釋器,可以通過命令行直接運(yùn)行Python代碼。在Shell中,可以輸入一行代碼并立即得到結(jié)果,非常適合于測(cè)試、嘗試新
    的頭像 發(fā)表于 11-29 14:36 ?1039次閱讀

    python軟件怎么運(yùn)行代碼

    Python是一種高級(jí)編程語言,它被廣泛用于開發(fā)各種類型的應(yīng)用程序,從簡(jiǎn)單的腳本到復(fù)雜的網(wǎng)絡(luò)應(yīng)用和機(jī)器學(xué)習(xí)模型。要運(yùn)行Python代碼,您需要一個(gè)Python解釋器,它可以將您的
    的頭像 發(fā)表于 11-28 16:02 ?826次閱讀

    python如何換行而不運(yùn)行代碼

    Python程序中的換行是指在代碼中使用特定的語法來表示換行,以使代碼更易讀。換行的目的是為了讓程序更具可讀性并提高代碼的可維護(hù)性。然而,換行不會(huì)對(duì)程序的執(zhí)行產(chǎn)生任何影響,它只是改善了
    的頭像 發(fā)表于 11-24 09:50 ?2976次閱讀

    python代碼寫完后點(diǎn)哪個(gè)運(yùn)行

    當(dāng)你完成了編寫Python代碼后,你可以選擇多種方式來運(yùn)行它。下面是幾種常見的運(yùn)行代碼的方式: Python解釋器:Python是一種解釋型
    的頭像 發(fā)表于 11-24 09:28 ?4363次閱讀

    python如何一直循環(huán)一個(gè)代碼

    Python中,有幾種方法可以實(shí)現(xiàn)代碼的循環(huán)執(zhí)行。下面我將詳盡、詳實(shí)、細(xì)致地介紹這些方法和它們的使用情況。 使用while循環(huán): 在Python中,可以使用while循環(huán)來重復(fù)執(zhí)行一段代碼
    的頭像 發(fā)表于 11-23 15:54 ?2281次閱讀

    python運(yùn)算符優(yōu)先級(jí)順序口訣

    Python是一種非常流行的編程語言,具有廣泛的應(yīng)用領(lǐng)域。在Python中,運(yùn)算符是進(jìn)行各種數(shù)學(xué)和邏輯運(yùn)算的關(guān)鍵部分。了解運(yùn)算符的優(yōu)先級(jí)順序?qū)τ谡_理解和書寫Python
    的頭像 發(fā)表于 11-22 14:34 ?1985次閱讀

    Python自帶的命令窗口

    Python自帶的命令窗口,也稱為Python交互式解釋器,是Python編程語言的一個(gè)重要工具,它允許用戶在命令行界面中輸入和執(zhí)行Python代碼
    的頭像 發(fā)表于 11-22 14:02 ?828次閱讀

    python如何換行而不運(yùn)行代碼

    Python中,換行是一種用來增加代碼的可讀性和組織性的方式。當(dāng)你在編寫Python代碼時(shí),換行通常用于分隔不同的代碼行或塊,使其更易于閱
    的頭像 發(fā)表于 11-22 10:52 ?2370次閱讀

    python怎樣運(yùn)行代碼

    討論Python代碼的運(yùn)行方式,包括解釋器、交互式環(huán)境和命令行。 Python代碼可以通過兩種主要的方式運(yùn)行:解釋執(zhí)行和編譯執(zhí)行。解釋執(zhí)行是指將源
    的頭像 發(fā)表于 11-22 10:31 ?1094次閱讀