深度优先搜索

深度优先搜索
節點搜索的順序
節點搜索的順序
節點進行深度优先搜索的順序
概况
類別搜索演算法
資料結構
复杂度
平均時間複雜度
空間複雜度
最佳解
完全性
相关变量的定义
分支係數
圖的最大深度

深度优先搜索算法(英語:Depth-First-Search,缩写为DFS)是一种用于遍历或搜索算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。[1](p. 603)这种算法不会根据图的结构等信息调整执行策略[來源請求]

深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的拓扑排序[1](p. 612),利用拓扑排序表可以方便的解决很多相关的图论问题,如无权最长路径问题等等。

因发明“深度优先搜索算法”,約翰·霍普克洛夫特罗伯特·塔扬1986年共同获得计算机领域的最高奖:图灵奖[2]

演算方法

  1. 首先将根节点放入stack中。
  2. stack中取出第一个节点,并检验它是否为目标。
    如果找到目标,则结束搜寻并回传结果。
    否则将它某一个尚未检验过的直接子节点加入stack中。
  3. 重复步骤2。
  4. 如果不存在未检测过的直接子节点。
    将上一级节点加入stack中。
    重复步骤2。
  5. 重复步骤4。
  6. stack为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。

C++的實作

定义一个结构体来表达一個二叉树的节点的结构:

struct Node {
    int self;     // 数据
    Node *left;   // 左孩子
    Node *right;  // 右孩子
};

那么我们在搜索一个树的时候,从一个节点开始,能首先获取的是它的两个子节点。例如:

A是第一个访问的,然后顺序是B和D、然后是E。然后再是C、F、G。那么我们怎么来保证这个顺序呢?

这里就应该用堆栈的结构,因为堆栈是一个后进先出(LIFO)的顺序。通过使用C++STL,下面的程序能帮助理解:

const int TREE_SIZE = 9;
std::stack<Node *> unvisited;
Node nodes[TREE_SIZE];
Node *current;

//初始化树
for (int i = 0; i < TREE_SIZE; i++) {
    nodes[i].self = i;
    int child = i * 2 + 1;
    if (child < TREE_SIZE) // Left child
        nodes[i].left = &nodes[child];
    else
        nodes[i].left = NULL;
    child++;
    if (child < TREE_SIZE) // Right child
        nodes[i].right = &nodes[child];
    else
        nodes[i].right = NULL;
}

unvisited.push(&nodes[0]); //先把0放入UNVISITED stack

// 树的深度优先搜索在二叉树的特例下,就是二叉树的先序遍历操作(这里是使用循环实现)
// 只有UNVISITED不空
while (!unvisited.empty()) {
    current = (unvisited.top()); //当前访问的
    unvisited.pop();
    if (current->right != NULL)
        unvisited.push(current->right );
    if (current->left != NULL)
        unvisited.push(current->left);
    cout << current->self << endl;
}

参考文献

  1. ^ 1.0 1.1 Introduction to Algorithms [算法导论]. ISBN 978-7-111-40701-0. 
  2. ^ Robert E Tarjan - A.M. Turing Award Winner. [2017-10-29]. (原始内容存档于2017-10-30) (英语). 

參見

Read other articles:

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Januari 2023. Rudolf Olden di Ascona, sekitar 1920-23 Rudolf Olden (14 Januari 1885 – 18 September 1940)[1][2] adalah seorang pengacara dan wartawan asal Jerman.[1] Pada periode Weimar,[1][2] ia adalah penyuara...

 

Gereja Katolik Mapeng麻蓬天主教堂Gereja Katolik Mapeng, 2015Gereja Katolik MapengLokasinya di Zhejiang28°57′51″N 118°53′04″E / 28.964297°N 118.884428°E / 28.964297; 118.884428Koordinat: 28°57′51″N 118°53′04″E / 28.964297°N 118.884428°E / 28.964297; 118.884428LokasiDistrik Kecheng, Quzhou, Zhejiang, TiongkokDenominasiProtestanismeSejarahDidirikan1830 (1830)ArsitekturStatusGerejaStatus fungsionalAktifTipe arsitek...

 

Asakura 朝倉市Kota BenderaLambangLokasi Asakura di Fukuoka PrefectureNegara JepangWilayahKyūshūPrefektur FukuokaPemerintahan • WalikotaYūji HayashiLuas • Total247 km2 (95 sq mi)Populasi (Oktober 1, 2015) • Total52.444 • Kepadatan212,3/km2 (5,500/sq mi)Zona waktuUTC+9 (Waktu Standar Jepang)Kode pos838-0061Nomor telepon0946-22-1111Alamat福岡県朝倉市菩提寺412番地2Situs webSitus web resmi Asak...

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Desember 2023. Berikut adalah daftar kota di Newfoundland dan Labrador: Daftar isi A B C D E F G H I J K L M N O P Q R S T U V W X Y Z City Corner Brook Mount Pearl St. John's Town A Admirals Beach Anchor Point Appleton Aquaforte Arnold's Cove Avondale B Badger Bain...

 

Bernkastel-Wittlich rural district of Rhineland-Palatinate (en) Tempat Negara berdaulatJermanNegara bagian di JermanRheinland-Pfalz NegaraJerman Ibu kotaWittlich PendudukTotal110.833  (2014 )GeografiLuas wilayah1.168 km² [convert: unit tak dikenal]Ketinggian337 m Berbatasan denganRhein-Hunsrück Birkenfeld Trier-Saarburg Bitburg-Prüm Daun (distrik) Cochem-Zell Organisasi politikAnggota dariLandkreistag Rheinland-Pfalz (en) Informasi tambahanZona waktuUTC+1 UTC+2 Kode NUTSDEB22 Lai...

 

Not to be confused with Heart of Dixie (film). American comedy-drama television series Hart of DixieGenre Comedy drama Created byLeila GersteinStarring Rachel Bilson Jaime King Cress Williams Wilson Bethel Scott Porter Tim Matheson Kaitlyn Black ComposerJeremy AdelmanCountry of originUnited StatesOriginal languageEnglishNo. of seasons4No. of episodes76 (list of episodes)ProductionExecutive producers Leila Gerstein Donald Todd Josh Schwartz Stephanie Savage Jason Ensler Len Goldstein Producers...

2015 film Not to be confused with Tangerines (film). TangerineTheatrical release posterDirected bySean BakerWritten by Sean Baker Chris Bergoch Produced by Sean Baker Karrie Cox Marcus Cox Darren Dean Shih-Ching Tsou Starring Kitana Kiki Rodriguez Mya Taylor Karren Karagulian Mickey O'Hagan Alla Tumanian James Ransone Cinematography Sean Baker Radium Cheung Edited bySean BakerProductioncompanies Duplass Brothers Productions Through Films Distributed byMagnolia PicturesRelease dates January...

 

Indonesian singer (born 1972) This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Yuni Shara – news · newspapers · books · scholar · JSTOR (July 2008) (Learn how and when to remove this template mes...

 

ThaascomuneThaas – Veduta LocalizzazioneStato Francia RegioneGrand Est Dipartimento Marna ArrondissementÉpernay CantoneVertus-Plaine Champenoise TerritorioCoordinate48°39′N 3°53′E / 48.65°N 3.883333°E48.65; 3.883333 (Thaas)Coordinate: 48°39′N 3°53′E / 48.65°N 3.883333°E48.65; 3.883333 (Thaas) Superficie11,14 km² Abitanti108[1] (2009) Densità9,69 ab./km² Altre informazioniCod. postale51230 Fuso orarioUTC+1 Codice ...

2020年夏季奥林匹克运动会科索沃代表團科索沃国旗IOC編碼KOSNOC科索沃奧林匹克委員會網站www.noc-kosovo.org(英文)(阿爾巴尼亞文)(塞爾維亞文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員11參賽項目6个大项旗手开幕式:阿基爾·賈科瓦(英语:Akil Gjakova)和瑪琳達·開爾門蒂(柔道)[1]闭幕式�...

 

此條目可参照英語維基百科相應條目来扩充。 (2021年5月6日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 约翰斯顿环礁Kalama Atoll 美國本土外小島嶼 Johnston Atoll 旗幟颂歌:《星條旗》The Star-Spangled Banner約翰斯頓環礁�...

 

2016年美國總統選舉 ← 2012 2016年11月8日 2020 → 538個選舉人團席位獲勝需270票民意調查投票率55.7%[1][2] ▲ 0.8 %   获提名人 唐納·川普 希拉莉·克林頓 政党 共和黨 民主党 家鄉州 紐約州 紐約州 竞选搭档 迈克·彭斯 蒂姆·凱恩 选举人票 304[3][4][註 1] 227[5] 胜出州/省 30 + 緬-2 20 + DC 民選得票 62,984,828[6] 65,853,514[6]...

此条目序言章节没有充分总结全文内容要点。 (2019年3月21日)请考虑扩充序言,清晰概述条目所有重點。请在条目的讨论页讨论此问题。 哈萨克斯坦總統哈薩克總統旗現任Қасым-Жомарт Кемелұлы Тоқаев卡瑟姆若马尔特·托卡耶夫自2019年3月20日在任任期7年首任努尔苏丹·纳扎尔巴耶夫设立1990年4月24日(哈薩克蘇維埃社會主義共和國總統) 哈萨克斯坦 哈萨克斯坦政府...

 

 本表是動態列表,或許永遠不會完結。歡迎您參考可靠來源來查漏補缺。 潛伏於中華民國國軍中的中共間諜列表收錄根據公開資料來源,曾潛伏於中華民國國軍、被中國共產黨聲稱或承認,或者遭中華民國政府調查審判,為中華人民共和國和中國人民解放軍進行間諜行為的人物。以下列表以現今可查知時間為準,正確的間諜活動或洩漏機密時間可能早於或晚於以下所歸�...

 

Овручский уезд Страна  Российская империя Губерния Волынская губерния Уездный город Овруч История и география Дата образования 1795 Дата упразднения 1923 Площадь 9274,5 вёрст² Население Население 205 390[1] (1897) чел.  Медиафайлы на Викискладе О́вручский уе́зд — а...

Commune in Occitania, FranceFormiguèresCommuneThe church of Sainte-Marie, in Formiguères Coat of armsLocation of Formiguères FormiguèresShow map of FranceFormiguèresShow map of OccitanieCoordinates: 42°36′56″N 2°06′09″E / 42.6156°N 2.1025°E / 42.6156; 2.1025CountryFranceRegionOccitaniaDepartmentPyrénées-OrientalesArrondissementPradesCantonLes Pyrénées catalanesGovernment • Mayor (2020–2026) Philippe Petitqueux[1]Area146.88...

 

Questa voce o sezione sull'argomento videogiochi d'azione non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Super BombermanvideogiocoIl primo mondo della modalità Normal GamePiattaformaSuper Nintendo Data di pubblicazione 28 aprile 1993 10 maggio 1993 20 novembre 1993 GenereAzione OrigineGiappone SviluppoH...

 

Football stadium in Glasgow, Scotland For other uses, see Celtic Park (disambiguation). Celtic ParkParkheadParadiseAerial view of Celtic Park UEFA Celtic ParkLocation in GlasgowLocationThe Celtic WayParkhead, Glasgow, ScotlandCoordinates55°50′59″N 4°12′20″W / 55.84972°N 4.20556°W / 55.84972; -4.20556OwnerCeltic F.C. (1897–present)[1]Capacity60,411[2]Record attendance83,500 v Rangers1 January 1938Field size114 x 74 yards (104.2 x 67.7 metre...

Type of foodFried okraFried okra, showing the interior and exteriorTypeFried vegetableCourseSide dishRegion or stateSouthern United StatesAssociated cuisineSoul food, cuisine of the Southern United StatesMain ingredientsOkraIngredients generally usedCornmeal Fried okra is a side dish associated with the cuisine of the Southern United States, particularly soul food. It is made by coating sliced okra in cornmeal and then frying it. History Okra is a staple of the cuisine of the Southern Un...

 

Heritage New Zealand Category 1 Historic Place in Auckland, New Zealand Bank of New Zealand Building, AucklandGeneral informationLocation125 Queen StreetTown or cityAucklandCountryNew ZealandCoordinates36°50′47″S 174°45′56″E / 36.846424158019744°S 174.76568262513325°E / -36.846424158019744; 174.76568262513325Construction started1866Opened1867Demolished1986Design and constructionArchitect(s)Leonard Terry Heritage New Zealand – Category 1Designated7-Ju...