图的定义存储和遍历(一级)
生活随笔
收集整理的這篇文章主要介紹了
图的定义存储和遍历(一级)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
圖:是一種多對(duì)多的關(guān)系,圖這一塊我們不進(jìn)行過(guò)多的說(shuō)明我們這里又一個(gè)高德地圖搜索路徑的截圖,我們要搜索起點(diǎn)北京大學(xué)的總校區(qū),重點(diǎn)是清華大學(xué),我現(xiàn)在選擇的是駕車(chē)而不是公交,如果是公交可能有其他的路徑,如果是火車(chē)可能是達(dá)到不了的,是不是一下子給我們提供了幾條路徑啊,3條路徑,為什么有3條路徑啊它有不同的依據(jù),比如說(shuō)紅綠燈最少的,避免頻繁停車(chē),擁堵較少的,可能某些路段比較堵,即使沒(méi)有紅綠燈也會(huì)有比較長(zhǎng)的時(shí)間,還有一個(gè)距離最短的,理論上距離短的話時(shí)間就會(huì)比較少,但是也不見(jiàn)得,這是我們見(jiàn)到的一個(gè)非常熟悉的功能,但是我們仔細(xì)想一下后臺(tái)的實(shí)現(xiàn)的話,我不由的想出3個(gè)問(wèn)題,哪三個(gè)問(wèn)題啊第一個(gè)問(wèn)題:高德地圖有那么多的地址,那么多的線路,好復(fù)雜啊,那采用了什么數(shù)據(jù)結(jié)構(gòu)?第二個(gè)問(wèn)題:有這么多的地點(diǎn)和線路,他在計(jì)算機(jī)里面是如何存儲(chǔ)的,也就是存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)是什么?第三個(gè)問(wèn)題:高德地圖已經(jīng)把相關(guān)的信息保存起來(lái)了,那它是怎么從這么多信息里面找到我們相關(guān)的符合各種規(guī)則的路徑的呢?并且各種路徑有不同的依據(jù)
要回答這三個(gè)問(wèn)題問(wèn)題1:采用的數(shù)據(jù)結(jié)構(gòu)叫什么,叫圖,不是線性表,不是樹(shù),是圖,圖是一種多對(duì)多的網(wǎng)狀的關(guān)系問(wèn)題2:那這些地點(diǎn)和線路是怎么存儲(chǔ)的,那就涉及到圖的存儲(chǔ)結(jié)構(gòu),簡(jiǎn)單來(lái)說(shuō),兩種結(jié)構(gòu),第一個(gè),順序結(jié)構(gòu),第二個(gè),鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)問(wèn)題3:怎么找到按照不同的標(biāo)準(zhǔn)提供的路徑的呢,那有紅綠燈少的那就有紅綠燈多的,他肯定是通過(guò)比較最后找到紅綠燈少的,這就涉及到了一個(gè)最短路徑的問(wèn)題學(xué)完了我們這一章之后呢,大家對(duì)這三個(gè)問(wèn)題就明白了,我們這一章的講解也是圍繞這這三個(gè)問(wèn)題來(lái)說(shuō)的先看第一個(gè)問(wèn)題,他采用的是圖的存儲(chǔ)結(jié)構(gòu),那就是圖的定義,最短路徑,講最短路徑之前,我們先講一下圖的遍歷,現(xiàn)在圖的定義,什么叫圖?簡(jiǎn)單來(lái)說(shuō)這就是兩張圖唄,網(wǎng)狀結(jié)構(gòu),各個(gè)節(jié)點(diǎn)代表什么含義,比如我們各個(gè)公交站,各個(gè)地鐵站,各個(gè)城市,那連線代表什么含義,表示他們之間是直接相通的,也就是我們這個(gè)圖是由什么組成的,圖是一種網(wǎng)狀的數(shù)據(jù)結(jié)構(gòu),有頂點(diǎn),還有描述頂點(diǎn)之間關(guān)系組成的有無(wú)向圖,也有有方向的,有什么區(qū)別嗎,有方向的表示a可以到d,看這個(gè)箭頭的方向,a是不是可以到d,d能到a嗎,d直接到a是不可以的,你要想到,deca,可以這么來(lái)到,那無(wú)向圖是怎么回事,無(wú)向圖是雙向通的,其實(shí)還是有向的,都是想通的,既可以從a到d,也可以從d到a,無(wú)向圖實(shí)際上是有向圖,是雙向圖,adbce我們稱(chēng)之為頂點(diǎn)吧,稱(chēng)之為圖的頂點(diǎn),那一個(gè)一個(gè)的邊我們稱(chēng)之為弧或邊,這是一個(gè),明確一下你看這個(gè)圖好怪啊,這個(gè)圖各個(gè)連線,都標(biāo)了不同的數(shù)字,那這個(gè)數(shù)字有什么意義,這個(gè)意義可大了,比如這個(gè)A代表北京,B代表石家莊,c代表沈陽(yáng),那先代表他們是想通的,那數(shù)字可以代表他們之間的距離,是可以代表距離的,或者是代表時(shí)間,因?yàn)橐话銜r(shí)間和距離不一定成正比,可能會(huì)擁堵,有一個(gè)有高速公路,有一個(gè)可能沒(méi)有高速公路,一個(gè)有高鐵,一個(gè)沒(méi)有高鐵,那距離長(zhǎng)度有時(shí)候也不能說(shuō)明問(wèn)題,可能也代表時(shí)間,這叫做加權(quán)圖,3,4,7就成為這條邊的權(quán)值,這個(gè)大家記住:在實(shí)際應(yīng)用中,圖不但需要表示元素之間是否存在某種關(guān)系,而且要加一個(gè)與實(shí)際意義相關(guān)的值,那這個(gè)值我們稱(chēng)之為權(quán),代表距離啦,代表時(shí)間的消耗啦,這張圖我們就稱(chēng)之為加權(quán)圖,這個(gè)我們也能夠理解,關(guān)于圖的定義我們就給大家講到這里
什么叫圖,有向圖和無(wú)向圖,加權(quán)圖,有頂點(diǎn)和很多的邊來(lái)組成,這是圖的定義,生活中有沒(méi)有這樣的案例,中國(guó)的交通網(wǎng),地鐵圖,都是網(wǎng)狀結(jié)構(gòu),再往下看,這樣的圖在計(jì)算機(jī)里面到底該怎么存儲(chǔ)呢,這實(shí)際上只是他的邏輯結(jié)構(gòu),那我們?cè)谟?jì)算機(jī)里面究竟該怎么來(lái)存,兩種方式吧1. 鄰接矩陣:就是二維數(shù)組,就相當(dāng)于順序結(jié)構(gòu),可以認(rèn)為就是順序結(jié)構(gòu)的,我們來(lái)看一下是怎么來(lái)存的,先看一下無(wú)向圖,頂點(diǎn)中間有邊,怎么辦,我就一個(gè)二維的數(shù)組,不是有4個(gè)頂點(diǎn)嗎,那就4行4列,你這個(gè)從a是不是能到b,那我就從a到b寫(xiě)個(gè)1唄,那你從b也能到a,那在這里也寫(xiě)個(gè)1,從c能到d嗎,從c到d無(wú)窮大∞,無(wú)窮大的,反過(guò)來(lái)從d到c有沒(méi)有,沒(méi)有,從d到c也是無(wú)窮大,有人說(shuō)那從a到a呢,從b到b呢,到他自己呢,我們也規(guī)定為無(wú)窮大,對(duì)象線上面的,我們也都給他寫(xiě)成無(wú)窮大,這么來(lái)表示,那你發(fā)現(xiàn)了沒(méi),如果用二維數(shù)組來(lái)表示圖像圖的話,你發(fā)現(xiàn)這個(gè)二維數(shù)組有什么特點(diǎn),它是關(guān)于這條對(duì)角線對(duì)稱(chēng)的,右上半部分和左下半部分是不是一樣的,是一樣的,這是一個(gè)無(wú)向圖,有向圖一樣,一共有4個(gè)頂點(diǎn),從a能到b,有我們用1來(lái)表示,那從b能到a嗎,不能,所以從b到a我們就認(rèn)為無(wú)窮大∞,從c能不能到d,從c到d無(wú)窮大,從d到c,也是無(wú)窮大,從d到a呢,從a到d也是可以的,同樣對(duì)角線上的還都是無(wú)窮大∞,自己到自己我們認(rèn)為是不可達(dá)的,這是我們所說(shuō)的有向圖,有向圖關(guān)于這條對(duì)角線對(duì)稱(chēng)嗎,不對(duì)稱(chēng),因?yàn)樗皇请p向的,那我們就用鄰接矩陣把這個(gè)圖給表示了,但是他這個(gè)時(shí)候有個(gè)缺點(diǎn),他有個(gè)什么缺點(diǎn),只要路徑想通,就用1來(lái)表示,那我們從這個(gè)圖我們能看到什么啊,我們只能看到這兩個(gè)頂點(diǎn)有沒(méi)有路徑,但是這兩個(gè)路徑多長(zhǎng)花了多少時(shí)間,知道嗎,不知道,什么時(shí)候知道了,那就要使用加權(quán)圖了加權(quán)圖我們?cè)趺磥?lái)表示,我們還是以有向圖來(lái)講,a到b有沒(méi)有路徑,有路徑,并且權(quán)值是3,a到b權(quán)值是3,b到a有沒(méi)有,沒(méi)有,b到a那就是無(wú)窮大,c到d是5,d到e無(wú)窮大沒(méi)有,但是反過(guò)來(lái)e到d是不是就有了,這個(gè)時(shí)候他就不是和上面一樣都是1了,1只能表明有這種關(guān)聯(lián)這個(gè)不僅表示有關(guān)聯(lián),還表示關(guān)聯(lián)的值,加權(quán)圖我們這么來(lái)表示,這是我們使用鄰接矩陣來(lái)表示的2. 鄰接表:就是鏈表,鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),還有一種就是我們采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)唄,叫鏈表,我們看他該怎么表示,基本上主體結(jié)構(gòu)是一個(gè)數(shù)組,每個(gè)數(shù)組后面引一個(gè)鏈表,首先告訴我他又幾個(gè)節(jié)點(diǎn),幾個(gè)頂點(diǎn),4個(gè),那好,那我整個(gè)數(shù)組的長(zhǎng)度是幾,是4,abcd存的編號(hào)分別是0123,這是不是代表著數(shù)組的索引,這只能說(shuō)明我有4個(gè)頂點(diǎn),能說(shuō)明他們呢頂點(diǎn)之間的關(guān)系嗎,說(shuō)明不了,怎么才可以說(shuō)明可以和b相連,可以可以和c相連,也可以和d相連,怎么辦呢,我們這么來(lái)做,a和c相連,還帶權(quán)值,就在a的后面引入一個(gè)鏈表,第一個(gè)節(jié)點(diǎn)1代表什么含義,1是b的索引,e1是權(quán)值,告訴我這個(gè)2是什么含義,為什么這里寫(xiě)個(gè)2,是不是c的索引,e2是a到c的權(quán)值,3是d,a和d也是相連的,e3是什么意思,e3是這條邊的權(quán)值,后面沒(méi)有了,與a相連的有三個(gè),他們的索引分別是1,2,3,我想知道c有幾個(gè)頂點(diǎn)相連,c只有0,0就是a唄,0代表a,e2就是權(quán)值,這是我們所說(shuō)的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),那下面這個(gè)圖又有什么區(qū)別上面是無(wú)向的,下面是有向的,5個(gè)頂點(diǎn)怎么辦,有一個(gè)數(shù)組,這個(gè)主結(jié)構(gòu)是一個(gè)數(shù)組,是不是5個(gè)元素,從0一直到4,目前我們可以看到,c可以到1,1是b,權(quán)值是e3,然后c還可以到d,d是3,權(quán)值是4,而我們只能見(jiàn)到存儲(chǔ)結(jié)構(gòu)的,這是我們所講的圖的存儲(chǔ)結(jié)構(gòu),主要是這兩種方式,那種方式用的比較多,還是鏈?zhǔn)降挠玫谋容^多,這是我們所說(shuō)的一個(gè)內(nèi)容,有人說(shuō)數(shù)組會(huì)占用更多的空間,我們不僅要考慮誰(shuí)占的空間多,誰(shuí)占的空間少,還要考慮后續(xù)哪個(gè)操作簡(jiǎn)單,哪個(gè)復(fù)雜,這就是我們所說(shuō)的圖的存儲(chǔ)結(jié)構(gòu),我們掌握到這個(gè)程度就可以了
我們?cè)賮?lái)看一下圖的遍歷,圖的遍歷是怎么回事啊,我們學(xué)過(guò)樹(shù)的遍歷了,有線性遍歷,有樹(shù)的遍歷,先序遍歷,中序遍歷,后序遍歷按層次遍歷,這一塊我們已經(jīng)把它們掌握了,什么叫圖的遍歷,這概念和樹(shù)是差不多的,從圖的某個(gè)頂點(diǎn)出發(fā),按照某種方法對(duì)圖中所有的節(jié)點(diǎn)訪問(wèn)且僅訪問(wèn)一次,我們遍歷就是把所有的節(jié)點(diǎn)走一遍,是后面很多算法的一個(gè)基礎(chǔ),比如我們后面的關(guān)鍵路徑,拓?fù)渑判?連通性,這都是圖后面相關(guān)的一些問(wèn)題,他們都是建立在圖的遍歷基礎(chǔ)上的,首先我要把每個(gè)頂點(diǎn)走一遍,我在走一遍的過(guò)程中要做哪些事情,這個(gè)大家要知道,圖的遍歷沒(méi)有先根,沒(méi)有后根,沒(méi)有中根,為什么,因?yàn)閷?duì)于圖來(lái)說(shuō)他有沒(méi)有根啊,它是沒(méi)有根的,深度優(yōu)先遍歷,和廣度優(yōu)先遍歷,他又這么兩種遍歷方式,縮寫(xiě)是DFS和BFS,告訴我FS是什么含義,FS是first search優(yōu)先遍歷,B是breadth廣度,D是depth深度,是不是有相應(yīng)的單詞,這個(gè)大家記住了,深度優(yōu)先遍歷記住,類(lèi)似于樹(shù)的先根遍歷,大家想一下,對(duì)于樹(shù)的先根遍歷,我們有幾種方式來(lái)實(shí)現(xiàn),算法的實(shí)現(xiàn),一種是遞歸的,一種是非遞歸的,非遞歸的我們要應(yīng)用棧,對(duì)于圖的深度優(yōu)先遍歷可以采用遞歸的方式或者采用棧的非遞歸的方式來(lái)實(shí)現(xiàn),當(dāng)然他比樹(shù)的遍歷要復(fù)雜了,別的不說(shuō),首先存儲(chǔ)就復(fù)雜了,存儲(chǔ)就比樹(shù)要復(fù)雜廣度優(yōu)先遍歷,相當(dāng)于樹(shù)的層次遍歷,按照層次遍歷,那你好好想一下,樹(shù)的層次遍歷是怎么來(lái)實(shí)現(xiàn)的,有沒(méi)有遞歸的方式,樹(shù)的層次遍歷有沒(méi)有遞歸的,沒(méi)有,是借入隊(duì)列的方式實(shí)現(xiàn)的,我們同樣圖也是,借助隊(duì)列的非遞歸方式來(lái)實(shí)現(xiàn)下面我給大家走一下過(guò)程,我們對(duì)于這個(gè)圖來(lái)說(shuō),對(duì)它進(jìn)行深度遍歷,舉個(gè)列子來(lái)說(shuō),這是北京,這是石家莊,這是天津,這是沈陽(yáng),這是鄭州,這是武漢,這是長(zhǎng)沙,比如我從北京開(kāi)始,所有的城市都走一遍,怎么走啊,這是不是相當(dāng)于網(wǎng)狀結(jié)構(gòu)啊,鐵路是不是連接到一起了,那我這個(gè)時(shí)候該怎么走啊,兩種方式,第一種方式一條道走到黑,北京-石家莊-鄭州-武漢-長(zhǎng)沙-廣州,一條路下來(lái)的,這叫什么,這叫深度優(yōu)先遍歷,一直找下一個(gè),一直找下一個(gè),是這么來(lái)的,相當(dāng)于先根遍歷,最左邊的一直往下走,就是這么來(lái)的,那你覺(jué)得廣度優(yōu)先遍歷是怎么回事啊,我要是如果從北京開(kāi)始的話,我先訪問(wèn)廣度,不是深度,先要訪問(wèn)彼此相鄰的城市,誰(shuí)和他相鄰,石家莊,天津,沈陽(yáng),你這兒不是還有濟(jì)南,這邊還有上海,先訪問(wèn)北京相鄰的這些,然后訪問(wèn)石家莊相連的,訪問(wèn)天津相連的,訪問(wèn)沈陽(yáng)相連的,一級(jí)一級(jí)來(lái)訪問(wèn),按照遠(yuǎn)近來(lái)訪問(wèn),這相當(dāng)于廣度優(yōu)先遍歷,不就是按層次嗎,那么我們下面來(lái)看了,我們給大家準(zhǔn)備了三個(gè)例子我就不信大家學(xué)不會(huì),我講了第一個(gè)之后第二個(gè)要大家自己來(lái)寫(xiě),包括第三個(gè)你自己能寫(xiě)出來(lái),先看第一個(gè),目前我們畫(huà)的圖都是無(wú)向圖的從0開(kāi)始,第一個(gè)是0,深度優(yōu)先,一條路往下走,是不是可以走1,也可以走2啊,你總要寫(xiě)一個(gè)吧,那我們就寫(xiě)那個(gè)數(shù)小的吧,選1就可以了,1怎么辦,繼續(xù)往下,是不是有3也有4,那我們就先寫(xiě)這個(gè)3吧,寫(xiě)了3之后怎么辦,你的下一步只能是7了,一條路往下走,然后再往下走,走誰(shuí)啊,走4,再往下走,1,遍歷的時(shí)候會(huì)進(jìn)行標(biāo)記的,1訪問(wèn)過(guò)了,訪問(wèn)過(guò)了怎么辦,這個(gè)過(guò)程是遞歸的,或者你利用棧的,當(dāng)你訪問(wèn)到4的話,1已經(jīng)訪問(wèn)過(guò)了,一步一步的往回退,先退到7這兒,然后退到3這兒,再退到1這兒,再退到0這兒,因?yàn)橐宦吠嘶貋?lái)沒(méi)有別的頂點(diǎn),如果我們7這個(gè)要是有個(gè)頂點(diǎn),你看先4退到7,就會(huì)先訪問(wèn)這個(gè)頂點(diǎn),再往后退,再往后退,沒(méi)有頂點(diǎn),這棵樹(shù)走完,再往后退,又退到這兒,還有頂點(diǎn)嗎,有,你發(fā)現(xiàn)這條道走完了,是不是還有另外一條路啊,這好比是從北京到石家莊,鄭州武漢到廣州了,到點(diǎn)要回來(lái)一趟,把這些城市訪問(wèn)一遍,再開(kāi)始另外一條路線,從這兒開(kāi)始再走2,2下面一直往下走,5,然后是多少啊,6,看是不是和我們下面的結(jié)果一樣:01374256這是一個(gè),這是我們說(shuō)的深度優(yōu)先遍歷,我們下面還有兩個(gè)例子,廣度優(yōu)先該怎么辦,就像我們樹(shù)的遍歷一樣,他要借助一個(gè)隊(duì)列來(lái)實(shí)現(xiàn),先把0放到隊(duì)列里面,然后誰(shuí)先出去啊,0先出去,0出去之后把它兩個(gè)直接相連的1和2放到這兒,這些相連的放到這兒,然后讓1再出去,1出去之后再做一件事,與1相鄰的3放到這,4也放到這兒,下一個(gè)怎么辦,讓2出去,2出去的話,與2相連的,5和6,放到這兒,然后3再出去,3出去了,與3相連的,這里有個(gè)7,4出去,與4相連的有個(gè)7,是不是有個(gè)7,那我們這里再放個(gè)7,或者我們這里不放7,7可以做個(gè)標(biāo)記,已經(jīng)放進(jìn)去了,這都是算法里面可以來(lái)變通的,可以有這些變化的,然后5再出來(lái),5有沒(méi)有孩子,有沒(méi)有下一個(gè),這是不是有6啊,6已經(jīng)放進(jìn)來(lái)了,可以做一下標(biāo)記,6再出來(lái),還有2,2已經(jīng)進(jìn)去過(guò),最后還有7,還有4,還有3,那都已經(jīng)標(biāo)記過(guò)了,按照這個(gè)方式,01234567,相當(dāng)于我們?nèi)绻阉闯梢豢脴?shù)的話,先第一層,再第二層,再第三層,再第四層,就按照這種方式來(lái)訪問(wèn)就可以了,記住這個(gè)隊(duì)列就可以很輕松的搞定了
我們?cè)賮?lái)看一個(gè),我們看下面這個(gè),告訴我這個(gè)圖比上面這個(gè)圖要復(fù)雜一下了,我們首先進(jìn)行深度優(yōu)先遍歷,下面的結(jié)果先不要看,這是深度優(yōu)先的一個(gè)過(guò)程,這是廣度優(yōu)先的一個(gè)過(guò)程,我們從A開(kāi)始,首先是A,深度優(yōu)先啊,先是A,然后有B有C,我們總要寫(xiě)一個(gè)唄,我們就選B,然后選E,然后選F,然后再選一個(gè)C,注意下面該怎么辦,就往后退了,正好退的時(shí)候比較簡(jiǎn)單,是不是沒(méi)有其它頂點(diǎn),有的話要順便訪問(wèn)以下,遞歸遍歷,B又退回來(lái)了,下一次該怎么辦了,D,D怎么辦,G,有兩個(gè),一個(gè)是I,一個(gè)是H,我們?cè)撛L問(wèn)H,訪問(wèn)小的唄再訪問(wèn)D了,D訪問(wèn)過(guò)了怎么辦,往后退,退到G了,還有一個(gè)呢,I,把這個(gè)I再訪問(wèn)一下,訪問(wèn)I怎么辦,繼續(xù)往后退,退到最后退這個(gè)根,是不是都解決了,abefcdghi,沒(méi)有問(wèn)題,還有不清楚的按照這個(gè)順序這個(gè)步驟來(lái)看就可以了,廣度優(yōu)先該怎么辦,一般使用隊(duì)列來(lái)實(shí)現(xiàn)的,借助一個(gè)隊(duì)列來(lái)實(shí)現(xiàn)的,怎么辦,先放誰(shuí),先放A,B,C,D,對(duì)于B來(lái)說(shuō)有E,對(duì)于C來(lái)說(shuō)有F,對(duì)于G來(lái)說(shuō)有H,對(duì)于G來(lái)說(shuō)有I,abcdefghi,這是我們講的廣度優(yōu)先的一個(gè)案例,那就給大家講到這兒了,把這個(gè)圖的深度優(yōu)先和廣度優(yōu)先的寫(xiě)出來(lái),我們繼續(xù)來(lái)看圖像圖的深度優(yōu)先和廣度優(yōu)先的遍歷,這是我們的第三個(gè)例子,這次聽(tīng)懂,前兩個(gè)回頭一看就知道了,現(xiàn)在講深度優(yōu)先,從A開(kāi)始,有3個(gè)路徑,B,C,D都可以,選一個(gè)唄,選B吧,選B的話怎么辦,選B的話又相連了,有E有C,最后只能走F了,下回在走D,然后怎么辦,是不是繞了一圈繞道主目錄里面去了然后怎么辦,往后退,F還有一段,是H,然后走I,下邊該怎么辦了,從I開(kāi)始退,退到H,再退到F,再退到C,再退到B,還有一套路徑呢,E和G,這是一個(gè)哦,明確了,和我們的結(jié)果一樣嗎,一樣的,那我們?cè)賮?lái)看一個(gè)廣度優(yōu)先不是問(wèn)題吧,廣度優(yōu)先怎么辦,你就畫(huà)一個(gè)隊(duì)列,先是A,然后就是B,C,D,先找直接相鄰的,下邊該誰(shuí)了,跟B相鄰的,E,和C相鄰的,F,與D相連的,不是F嗎,BCD相連的都說(shuō)了,跟E相連的G,根F相連的H,下邊該怎么辦了,跟G相連的沒(méi)有,跟H相連的,I,ABCDEFJHI,就是他了,這是我們說(shuō)的一個(gè)遍歷,A擁有三個(gè)相鄰的,不管是廣度還是深度優(yōu)先,里面選B,還是選C,到底是選D,我們現(xiàn)在說(shuō)選個(gè)小的,那實(shí)際中它是怎么來(lái)的,實(shí)際中它是這么來(lái)的比如說(shuō)你要采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),你要找A相連的節(jié)點(diǎn),他先找第一個(gè),這個(gè)結(jié)構(gòu)大家確定了,與a相鄰的節(jié)點(diǎn),是訪問(wèn)a,還是訪問(wèn)b,還是訪問(wèn)d,表里面如果兩個(gè)節(jié)點(diǎn)交換一下順序,他的順序就變了,它是按照這個(gè)順序來(lái)就可以了,這是我們講的關(guān)于圖的相關(guān)內(nèi)容,圖的定義,圖的存儲(chǔ),還有圖的遍歷,給了一些廣度深度一些算法,并且舉了三個(gè)例子,深度優(yōu)先遍歷相當(dāng)于先根遍歷如果我們要用代碼來(lái)實(shí)現(xiàn)的話,可以采用遞歸,也可以采用借助棧的方式,廣度遍歷類(lèi)似于樹(shù)的層次遍歷,我們要借助隊(duì)列的非遞歸方式
?
總結(jié)
以上是生活随笔為你收集整理的图的定义存储和遍历(一级)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 二叉树的遍历实现-2(三级)
- 下一篇: 图的最短路径(一级)