解析:從歐拉圖到鄰接表)
簡介本資源是哈爾濱工業(yè)大學《集合論與圖論下》慕課MOOC課程的配套習題答案整理面向計算機、數(shù)學及相關(guān)專業(yè)本科生及自學者助力系統(tǒng)掌握圖論核心理論與解題方法。內(nèi)容覆蓋圖的基本類型簡單圖、有向/無向/加權(quán)圖、樹與連通性、鄰接矩陣與鄰接表表示法、補圖與偶圖、歐拉圖與哈密頓圖判定、圖著色、平面圖、割點橋分析及最短路徑算法等關(guān)鍵模塊緊扣課程講授邏輯適合作為課后鞏固、考前復習與自學核驗的重要參考。資源為單個PDF文件大小3.16MB排版清晰、章節(jié)對應明確含第1–4講完整答案便于離線查閱與重點標注。目前已有359人學習下載答案基于高頻重復題型歸納整理并附有選項辨析提示雖非官方發(fā)布但結(jié)構(gòu)完整、思路清晰可有效提升解題準確率與概念理解深度。1. 圖論到底是什么——別被“點和線”騙了它其實是你手機里導航、社交推薦、甚至快遞路徑背后的隱形大腦你用地圖App查路線時系統(tǒng)怎么知道哪條路最快你刷短視頻平臺為什么總能推給你想看的內(nèi)容你點外賣騎手怎么在幾十個訂單里規(guī)劃出最省時間的送單順序這些看似毫不相干的事背后都藏著同一個數(shù)學工具圖論。它不講函數(shù)也不解方程只研究“誰連著誰”——把城市變成點頂點把道路變成線邊把用戶變成點把“關(guān)注”“點贊”變成線把商品變成點把“經(jīng)常一起買”變成線。就這么簡單兩樣東西搭出來的結(jié)構(gòu)卻能描述真實世界里最復雜的關(guān)聯(lián)。《哈工大集合論與圖論下慕課MOOC答案》這份資源不是一本習題集而是一份“帶注釋的通關(guān)地圖”它對應的是國內(nèi)高校公認扎實的圖論入門課下半程從“圖長什么樣”一路走到“怎么用圖解決真問題”。如果你剛學完集合論基礎、正卡在“歐拉圖和哈密頓圖分不清”“鄰接矩陣和鄰接表到底該用哪個”“補圖到底是把邊全刪了還是全加上了”這些具體困惑里——這份資料就是為你寫的。它不替代聽課但能幫你把老師講的抽象定義立刻對上一個可驗證、可對比、有上下文的答案參考。零基礎沒關(guān)系。只要你能看懂“A連B”“C沒連D”就能跟著這份材料從第一講的“什么是簡單圖”開始一講一講地把圖論的骨架摸清楚。2. 先搞懂一個前提這份“答案”不是抄作業(yè)本而是幫你建立判斷力的腳手架很多人第一次看到“慕課答案”四個字本能反應是“哦抄的吧”——這恰恰是新手最容易掉進的第一個認知坑。我們得先說透這份《哈工大集合論與圖論下慕課MOOC答案》的價值根本不在“讓你交差”而在于幫你建立一種關(guān)鍵能力在高度相似的選項中識別出那個唯一符合定義的正確答案。慕課題庫有個特點題目重復率高但選項會微調(diào)。比如一道考“歐拉圖判定”的題A選項說“所有頂點度數(shù)為偶數(shù)”B選項說“至少有兩個頂點度數(shù)為偶數(shù)”C選項說“所有頂點度數(shù)為奇數(shù)”D選項說“存在一條經(jīng)過每條邊一次的路徑”。表面看都沾點邊但只有A完全滿足無向圖歐拉圖的充要條件。如果你沒真正理解定義光靠記憶“歐拉圖能一筆畫”就很容易選錯C或D。這份答案的珍貴之處正在于它把每道題的判定依據(jù)直接錨定在教材定義上。它不是告訴你“選A”而是用簡短注釋點明“此處考察無向圖歐拉圖判定定理當且僅當所有頂點度數(shù)均為偶數(shù)”。你看一遍再做一遍同類題下次再遇到選項微調(diào)就能自己推理出來。這種能力在后續(xù)學算法比如判斷一個網(wǎng)絡能不能遍歷所有鏈路而不重復、學數(shù)據(jù)庫比如分析用戶關(guān)系圖有沒有環(huán)、甚至學機器學習比如理解圖神經(jīng)網(wǎng)絡GNN的輸入結(jié)構(gòu)時都是底層思維習慣。所以使用它的第一步不是打開文檔找答案而是打開課程視頻暫停在題目出現(xiàn)的那一刻先自己讀題、劃關(guān)鍵詞、回憶定義再對照這份資料里的解析邏輯。你會發(fā)現(xiàn)很多“不會”其實只是定義沒吃透而很多“會了”是因為你終于看清了題目在考哪個精確的數(shù)學條件。2.1 為什么必須從“圖的基本概念”講起——因為90%的翻車都發(fā)生在起點沒站穩(wěn)圖論看起來簡單但新手常犯一個隱蔽錯誤把生活語言直接套進數(shù)學定義。比如看到“連通圖”第一反應是“我能從北京開車到上海”這沒錯但數(shù)學上“連通”特指圖中任意兩個頂點之間都存在一條由邊組成的路徑。注意是“任意兩個”不是“大部分”是“存在路徑”不是“有直達航班”。再比如“簡單圖”生活中說“這個圖很簡單”數(shù)學上它有明確定義沒有環(huán)頂點到自身的邊且沒有重邊同一對頂點間多于一條邊的無向圖。如果題目給了一張帶自環(huán)的圖問“這是簡單圖嗎”答案就是“否”哪怕它只有3個點、2條邊。這份資料的第一講“圖的基本概念”就是在幫你校準這種語言差異。它覆蓋的類型非常典型無向圖 vs 有向圖無向圖的邊像一根繩子兩端沒區(qū)別有向圖的邊像單行道箭頭方向決定誰能到誰??荚嚦?加邢驁D的“入度”指向它的邊數(shù)和“出度”它指向的邊數(shù)必須分開算。加權(quán)圖每條邊標著數(shù)字比如距離、費用、延遲。這不是裝飾是后續(xù)學最短路徑Dijkstra、最小生成樹Kruskal的前提。子圖、生成子圖、導出子圖這三個詞長得像但邏輯不同。子圖是隨便刪點刪邊生成子圖必須保留所有頂點只刪邊導出子圖則是選定一部分頂點把它們之間原來所有的邊都保留下來??荚囶}常讓判斷某個圖是不是另一個圖的導出子圖關(guān)鍵就看“選中的點之間原圖有的邊這里是不是全都有”。提示不要試圖背下所有定義。拿起一張白紙畫4個點標為v1,v2,v3,v4然后按定義自己動手構(gòu)造畫一個簡單圖檢查有沒有環(huán)、重邊畫一個有向圖標幾個箭頭算算v2的入度和出度再畫一個加權(quán)圖給幾條邊標上1,5,10。動手畫三遍比看十遍定義記得牢。2.2 “連通圖、補圖、偶圖”這組概念為什么總讓人暈——用三個生活場景秒懂第二講的這三個概念名字抽象但本質(zhì)極清晰。我們不用術(shù)語轟炸直接用你能馬上驗證的例子連通圖想象一個微信群。群里所有人頂點只要能通過“好友關(guān)系鏈”傳話就算連通。比如A認識BB認識C那A和C就算連通哪怕他倆沒加微信。但如果群里有個人D誰都不認識也沒人認識他那整個群就不連通了——D是孤立點。圖論里連通圖要求任意兩點間都有路徑不連通的圖會被分成若干個“連通分支”就像微信群里分成了幾個小圈子圈子內(nèi)能傳話圈子間不能。補圖這是個容易誤解的點。補圖不是“把圖刪干凈”而是“把原圖沒連的邊全連上已經(jīng)連的邊全斷開”。舉個例子原圖只有3個點A,B,C只連了A-B這一條邊。那么它的補圖就是把A-C、B-C這兩條邊連上同時把A-B這條邊去掉。結(jié)果補圖里A和B不連但A連C、B連C。補圖的頂點集和原圖完全一樣邊集是“全可能邊集”減去原圖的邊集??荚嚦?荚瓐D連通補圖一定連通嗎答案是否定的。上面3點例子中原圖只有A-B不連通C是孤立點但它的補圖A-C,B-C是連通的反過來也能構(gòu)造出原圖連通但補圖不連通的例子。關(guān)鍵在理解“補”是相對“完全圖”而言的。偶圖二部圖這個名字更直白——圖里的所有點能分成兩組比如男生組、女生組并且所有的邊都只出現(xiàn)在組與組之間組內(nèi)絕對沒有邊。比如“學生選課”學生是一組課程是一組邊表示“某學生選了某課”學生之間、課程之間沒有邊。這就是典型的偶圖。判斷一個圖是不是偶圖有個血淚經(jīng)驗試著給所有頂點染兩種顏色比如紅和藍要求每條邊的兩個端點顏色不同。如果能成功染色它就是偶圖如果染著染著發(fā)現(xiàn)矛盾比如一個點既要是紅又要是藍那就不是。這個“二染色法”是考試和實際編程中最常用的判定手段。2.3 避坑新手在“圖的基本概念”階段最容易踩的5個坑現(xiàn)象做題時看到“有向圖的度數(shù)”直接用無向圖的“度數(shù)鄰接點個數(shù)”去算。原因混淆了有向圖的“入度”有多少邊指向它和“出度”它指向多少邊而“度數(shù)”在有向圖里通常指兩者之和但題目考的往往是單獨的入度或出度。解決看到有向圖第一反應寫兩列一列“入度”一列“出度”。計算前先確認題目問的是哪個。現(xiàn)象判斷“補圖”時以為要把原圖的邊全部刪除再隨便連幾條新邊。原因沒抓住“補圖是相對于完全圖而言的”這個核心。完全圖是n個點之間所有可能的邊無向圖是n(n-1)/2條有向圖是n(n-1)條都連滿的狀態(tài)。解決先算出n個點的完全圖有多少條邊再減去原圖的邊數(shù)得到補圖的邊數(shù)。這是驗算補圖是否畫對的最快方法?,F(xiàn)象看到“偶圖”以為只要點能分成兩組就行忽略了“組內(nèi)不能有邊”這個硬性條件。原因生活化理解過度把“分組”等同于“偶圖”。比如把朋友圈所有人按年齡分“青年”“中年”但青年之間依然互相關(guān)注有邊這就不是偶圖。解決畫出分組后立刻檢查每一組內(nèi)部有沒有任意兩個點之間連了邊有就立刻排除。現(xiàn)象做“子圖”相關(guān)題把“生成子圖”和“導出子圖”弄反。原因記混了“生成保點刪邊”和“導出選點保邊”的口訣。解決用縮寫強化記憶“生頂點全留生下來的孩子一個都不能少”“導導出的點原邊全要導出即提取原汁原味”。現(xiàn)象看到“簡單圖”的定義覺得“沒有環(huán)和重邊”很容易結(jié)果題目給了一個帶平行邊的圖比如v1-v2之間有兩條邊還問是不是簡單圖。原因?qū)Α爸剡叀崩斫獠幻舾幸詾橹挥挟嫵蓛蓷l完全重疊的線才算其實只要兩個頂點間邊數(shù)1就是重邊。解決數(shù)邊時對每一對頂點vi,vj單獨統(tǒng)計它們之間有多少條邊。大于1立刻判否。3. 從“能畫出來”到“能算出來”歐拉圖與哈密頓圖是圖論里最經(jīng)典的兩道分水嶺第三講和第四講是整門課的轉(zhuǎn)折點。前兩講在學“圖長什么樣”這兩講開始學“圖能干什么”。歐拉圖和哈密頓圖聽名字像孿生兄弟其實內(nèi)核完全不同歐拉圖關(guān)心的是“邊”——能不能不重復、不遺漏地走完所有邊哈密頓圖關(guān)心的是“點”——能不能不重復、不遺漏地路過所有頂點。這個根本差異決定了它們的判定方法、應用場景和難度層級。歐拉圖有明確、易驗證的充要條件無向圖所有頂點度數(shù)為偶數(shù)有向圖每個頂點入度出度所以它是“能算出來”的哈密頓圖至今沒有多項式時間的通用判定算法屬于NP難問題所以它是“能猜出來、但很難證出來”的。這份資料把這兩講放在一起正是為了讓你在對比中建立清晰認知別被相似的名字迷惑先盯住問題對象邊 or 點再選工具歐拉定理 or 哈密頓必要條件。3.1 歐拉圖一筆畫問題的數(shù)學化身3步判定法比心算還快歐拉圖的現(xiàn)實感最強。小時候玩的“一筆畫”游戲就是歐拉回路的雛形。它的數(shù)學價值在于提供了一種檢驗圖結(jié)構(gòu)是否“均衡”的方法。一個網(wǎng)絡比如電路板布線、物流配送路線如果能形成歐拉回路意味著你可以設計一條路徑讓設備/車輛/信號遍歷所有連接最終回到起點效率極高。判定它只需三步確認圖的類型是無向圖還是有向圖題目一定會說明別跳過檢查連通性必須是連通圖或強連通圖對有向圖而言。如果圖本身是散的肯定沒法一筆畫完。驗證度數(shù)條件無向圖所有頂點的度數(shù)必須是偶數(shù)。這是充要條件缺一不可。有向圖每個頂點的入度必須等于出度。同樣是充要條件。來看一個典型例題模擬題給定無向圖G頂點集{v1,v2,v3,v4}邊集{(v1,v2), (v2,v3), (v3,v4), (v4,v1), (v1,v3)}。問G是否為歐拉圖解第一步是無向圖。第二步畫一下四個點圍成一個四邊形再加一條對角線v1-v3。顯然任意兩點都連通是連通圖。第三步算度數(shù)。v1連v2,v4,v3 → 度數(shù)3v2連v1,v3 → 度數(shù)2v3連v2,v4,v1 → 度數(shù)3v4連v3,v1 → 度數(shù)2。v1和v3度數(shù)是奇數(shù)不滿足“全為偶數(shù)”所以不是歐拉圖。但注意它滿足歐拉路徑的條件恰好兩個奇度數(shù)頂點所以可以一筆畫但起點和終點必須是v1和v3。這份資料里對這類細微差別都有明確標注避免你把“歐拉路徑”和“歐拉回路”混為一談。3.2 哈密頓圖旅行商問題的簡化版為什么它讓計算機科學家頭疼如果說歐拉圖是“走完所有路”哈密頓圖就是“拜訪所有城”。它要求找到一條路徑哈密頓路徑或回路哈密頓回路使得圖中每個頂點恰好經(jīng)過一次。這聽起來很美但數(shù)學上極其困難。目前沒有任何像歐拉定理那樣簡潔的充要條件。我們能用的主要是必要條件不滿足則一定不是和充分條件滿足則一定是以及一些實用的排除技巧。必要條件Dirac定理對于n個頂點的簡單圖如果每個頂點的度數(shù)都≥n/2那么它一定是哈密頓圖。這是一個“夠用就好”的強條件但不滿足它不代表不是哈密頓圖。常用排除法最有效割點法如果圖中存在一個頂點v刪除v后圖的連通分支數(shù)≥3那么原圖一定不是哈密頓圖。因為哈密頓回路是一個圈刪掉圈上一個點最多把圈切成一條鏈連通分支數(shù)1絕不可能變成3個以上碎片。度數(shù)和法對任意兩個不相鄰的頂點u和v如果deg(u)deg(v) n那么圖不是哈密頓圖。Ore定理舉個避坑例子題目給一個5個頂點的圖其中v1只連v2v2連v1和v3v3連v2和v4v4連v3和v5v5只連v4。這是一條鏈v1-v2-v3-v4-v5。問是否為哈密頓圖答不是。因為哈密頓回路要求首尾相連形成圈而這條鏈的兩端v1和v5度數(shù)都是1無法閉合。更嚴謹?shù)赜酶铧c法刪掉v2剩下v1孤立、v3-v4-v5連通共2個分支刪掉v3剩下v1-v2、v4-v5也是2個分支。雖然沒到3個但已暴露結(jié)構(gòu)脆弱。而哈密頓圖要求圖是“1-連通”的刪一個點仍連通這個鏈刪掉中間點就斷成兩截顯然不滿足。3.3 避坑歐拉圖與哈密頓圖混淆的4個致命瞬間現(xiàn)象看到題目說“能否不重復地走完所有邊”下意識去檢查每個頂點的度數(shù)是不是都≥2。原因把哈密頓圖的必要條件每個頂點度數(shù)≥2是哈密頓圖的必要條件但非充分錯誤遷移到歐拉圖上。歐拉圖只認“奇偶性”不認“大小”。解決歐拉圖只問“偶數(shù)”哈密頓圖才問“夠不夠2”。建立條件反射見“邊”→想“奇偶”見“點”→想“度數(shù)大小”?,F(xiàn)象判斷有向圖歐拉性時只算了出度忘了入度或者把入度出度加起來當度數(shù)用。原因沒區(qū)分有向圖的度數(shù)定義。有向圖的“度數(shù)”是入度出度但歐拉定理要求的是“入度出度”不是“入度出度偶數(shù)”。解決強制自己畫表格左邊列頂點中間列出度右邊列入度最后加一列“入度出度”。三列并排一目了然?,F(xiàn)象看到一個圖有哈密頓路徑就認為它也有哈密頓回路。原因路徑和回路是不同概念。路徑有起點終點回路首尾相接。一個鏈狀圖有哈密頓路徑v1-v2-v3-v4但沒有哈密頓回路因為v1和v4不連。解決題目問“哈密頓圖”默認指存在哈密頓回路。如果只找到路徑必須額外驗證起點和終點是否相鄰?,F(xiàn)象用Dirac定理度數(shù)≥n/2去證明一個圖是哈密頓圖結(jié)果算出來v1度數(shù)2n522.5于是斷定“不是哈密頓圖”。原因Dirac定理是充分條件不是必要條件。它說“滿足就一定是”但沒說“不滿足就一定不是”。這個圖完全可能通過其他方式是哈密頓圖。解決Dirac定理只用來“快速確認是”絕不用來“快速確認不是”。排除哈密頓圖優(yōu)先用割點法或Ore定理。4. 把抽象概念落地用鄰接矩陣和鄰接表親手“看見”一個圖的結(jié)構(gòu)前面講的都是“紙上談兵”現(xiàn)在到了動手環(huán)節(jié)。圖論要真正用起來必須把它變成計算機能處理的數(shù)據(jù)。而“鄰接矩陣”和“鄰接表”就是圖論通往編程世界的兩座橋。它們不是選擇題而是必修課鄰接矩陣適合小而稠密的圖比如5個點邊很多操作直觀鄰接表適合大而稀疏的圖比如1000個用戶每人只關(guān)注10個節(jié)省空間。這份資料雖是文字答案但它在解析題目時會明確指出“此題用鄰接矩陣更易觀察”或“此題用鄰接表可快速找出所有鄰居”教你根據(jù)問題選工具。下面我們就用一個統(tǒng)一的例子帶你親手構(gòu)建這兩種表示。4.1 鄰接矩陣一張“誰和誰有關(guān)系”的二維表格我們還是用之前的5點鏈圖頂點{v1,v2,v3,v4,v5}邊{(v1,v2), (v2,v3), (v3,v4), (v4,v5)}。鄰接矩陣是一個5×5的方陣行和列都按頂點順序排列v1,v2,v3,v4,v5。規(guī)則超簡單如果vi到vj有一條邊無向圖中vi-vj和vj-vi等價矩陣[i][j]位置填1否則填0。因為是無向圖矩陣一定是對稱的主對角線以外。構(gòu)建過程第一行v1v1只連v2所以[0][1]1索引從0開始其余為0 →[0,1,0,0,0]第二行v2v2連v1和v3 →[1,0,1,0,0]第三行v3v3連v2和v4 →[0,1,0,1,0]第四行v4v4連v3和v5 →[0,0,1,0,1]第五行v5v5只連v4 →[0,0,0,1,0]最終鄰接矩陣[[0,1,0,0,0], [1,0,1,0,0], [0,1,0,1,0], [0,0,1,0,1], [0,0,0,1,0]]注意主對角線全是0因為我們假設沒有自環(huán)簡單圖。如果題目允許自環(huán)對角線對應位置填1。這個矩陣能直接回答很多問題v1的鄰居是誰看第一行只有第1列v2是1 → 鄰居是v2。v2和v4連嗎看第二行第四列索引[1][3]是0 → 不連。圖是連通的嗎計算矩陣的冪A2, A3...如果某次冪后所有非對角線元素都0說明任意兩點間有路徑。但手動算冪太麻煩所以鄰接矩陣更適合小圖的直觀觀察。4.2 鄰接表一份“每個點的朋友圈”清單鄰接表更貼近人的思維。它是一個列表列表的每個元素對應一個頂點里面存著這個頂點的所有鄰居。對同一個5點鏈圖v1: [v2]v2: [v1, v3]v3: [v2, v4]v4: [v3, v5]v5: [v4]在Python里它通常用字典實現(xiàn)graph { v1: [v2], v2: [v1, v3], v3: [v2, v4], v4: [v3, v5], v5: [v4] }優(yōu)勢立現(xiàn)查鄰居快graph[v3]直接返回[v2, v4]O(1)時間。省空間只存儲存在的邊。5個點最多有10條邊完全圖但這個圖只有4條邊鄰接表只存4個字符串而鄰接矩陣要存25個數(shù)字。增刪邊方便給v1加個朋友v3graph[v1].append(v3)graph[v3].append(v1)無向圖要雙向加。4.3 避坑表示法選擇與轉(zhuǎn)換的3個實戰(zhàn)陷阱現(xiàn)象題目要求“求v1的度數(shù)”你對著鄰接矩陣把第一行所有1加起來得到1但答案是2。原因忘了無向圖的鄰接矩陣是對稱的v1-v2這條邊在矩陣里占了兩個位置[0][1]和[1][0]。但度數(shù)是鄰居個數(shù)不是矩陣里1的總數(shù)。解決算度數(shù)永遠只看一行或一列別加總整個矩陣。第一行有1個1度數(shù)就是1。現(xiàn)象用鄰接表表示有向圖時把“v1→v2”只加在v1的列表里忘了v2的列表里不需要加v1。原因混淆了無向圖雙向添加和有向圖單向添加。有向圖的鄰接表只記錄“出邊”。v1→v2只在v1的列表里加v2v2的列表里只有它指向的點。解決畫個小箭頭在草稿紙上箭頭從誰出發(fā)就往誰的列表里加目標?,F(xiàn)象需要判斷兩個圖是否同構(gòu)結(jié)構(gòu)相同只是點標簽不同你試圖用鄰接矩陣逐個比較發(fā)現(xiàn)標簽順序不同矩陣就不同于是判否。原因同構(gòu)圖的鄰接矩陣只是行和列的順序不同即存在一個置換矩陣P使得P·A1·P^T A2。直接比矩陣肯定不行。解決同構(gòu)判定是難題新手應聚焦于不變量頂點數(shù)、邊數(shù)、度數(shù)序列把所有頂點度數(shù)從小到大排序列相同才可能同構(gòu)、是否存在三角形等。這份資料在相關(guān)題目解析里會提示用哪些不變量快速排除。5. 學完這四講你的下一步該往哪里走——從“會做題”到“能建?!钡能S遷路徑學到這里你已經(jīng)掌握了圖論的核心骨架從基本概念點、邊、圖的類型到關(guān)鍵性質(zhì)連通、補、偶再到兩大經(jīng)典問題歐拉、哈密頓最后落到了數(shù)據(jù)表示矩陣、表。但這只是開始。真正的圖論能力不在于解出慕課的題目而在于當你面對一個新問題時能本能地問“這個問題能不能抽象成一張圖”。比如你幫社團設計值班表發(fā)現(xiàn)“每個人不能連續(xù)值兩天”“每天至少兩人”這就可以建模成一個圖頂點是所有“人-日期”組合邊連接那些沖突的組合如張三周一和張三周二求一個獨立集選中的點互不相鄰就解決了。這種建模能力才是圖論賦予你的“超能力”。下面是我為你規(guī)劃的、可立即執(zhí)行的三條進階路徑每條都配了具體動作不空談5.1 路徑一用Python把課堂知識跑起來推薦指數(shù)★★★★★理論不動手永遠是霧里看花。用50行代碼你就能親手驗證歐拉定理、畫出鄰接矩陣、甚至搜索哈密頓路徑。這不是為了炫技而是為了獲得“確定性反饋”——代碼跑通了你就真的懂了報錯了錯在哪一清二楚。第一步安裝并跑通基礎環(huán)境確保你有Python 3.7然后安裝NetworkX圖論專用庫pip install networkx matplotlib第二步復現(xiàn)“5點鏈圖”的歐拉性判定import networkx as nx # 創(chuàng)建無向圖 G nx.Graph() G.add_nodes_from([v1,v2,v3,v4,v5]) G.add_edges_from([(v1,v2), (v2,v3), (v3,v4), (v4,v5)]) # 打印每個頂點的度數(shù) print(各頂點度數(shù):, dict(G.degree())) # 輸出: {v1: 1, v2: 2, v3: 2, v4: 2, v5: 1} # 判定所有度數(shù)是否為偶數(shù) degrees [d for n, d in G.degree()] is_eulerian all(d % 2 0 for d in degrees) print(是否為歐拉圖, is_eulerian) # False運行這段代碼你會親眼看到v1和v5度數(shù)是1奇數(shù)程序輸出False。這就是最硬的證據(jù)。把邊改成[(v1,v2), (v2,v3), (v3,v4), (v4,v5), (v5,v1)]首尾相連成環(huán)再運行度數(shù)全變2輸出True。這種即時反饋比看十頁解析都管用。5.2 路徑二攻克一個真實小項目推薦指數(shù)★★★★☆選一個你生活中能接觸到的小問題用圖論建模解決。我當年第一個項目是優(yōu)化宿舍樓的快遞代取路線。目標讓一個同學取件員一次性幫5個人取完快遞路徑最短。這本質(zhì)上就是哈密頓路徑問題5個快遞點1個起點找最短訪問順序。步驟如下抽象把宿舍樓一層平面圖簡化標出5個快遞柜位置v1-v5和取件員起點s。賦權(quán)用步數(shù)或秒數(shù)估算任意兩點間的距離構(gòu)成一個6×6的加權(quán)鄰接矩陣。求解用NetworkX的nx.approximation.traveling_salesman_problem近似算法因精確解太慢求最短環(huán)。驗證把算出的順序如s→v3→v1→v5→v2→v4→s畫在紙上量一下總長度和你隨便走的路線比是不是真短了20%這個項目不追求完美但做完你會深刻理解哈密頓圖不是紙上的概念它是解決“最優(yōu)順序”問題的數(shù)學語言。而且你順手學會了如何把現(xiàn)實距離轉(zhuǎn)化為圖的權(quán)重這是建模的關(guān)鍵一步。5.3 路徑三向“圖神經(jīng)網(wǎng)絡GNN”眺望推薦指數(shù)★★★☆☆如果你對AI、機器學習感興趣圖論是GNN的基石。GNN能處理社交網(wǎng)絡、分子結(jié)構(gòu)、知識圖譜等“關(guān)系型數(shù)據(jù)”而它的輸入就是你剛學的鄰接矩陣或鄰接表。GNN的第一層就是對每個頂點聚合它鄰居的特征就像你查graph[v3]拿到[v2,v4]然后把v2和v4的特征加起來。所以你現(xiàn)在學的鄰接表就是未來讀懂GNN代碼的“母語”。不必現(xiàn)在就學GNN但可以做個標記當你看到一篇講“GNN如何預測用戶是否會購買某商品”的文章時試著去找到它的圖結(jié)構(gòu)——用戶是點購買行為是邊還是商品是點共同購買是邊用你剛練熟的“建模三問”誰是點誰是邊邊有權(quán)重嗎去拆解它。這種習慣會讓你在未來接觸前沿技術(shù)時少一層隔膜。從那以后我每次學一個新算法都強制自己用NetworkX造一個小圖跑一遍再手動畫出結(jié)果。哪怕只是驗證一個度數(shù)我也要看到print()輸出的數(shù)字和我心算的一致。這種“眼見為實”的確認感是驅(qū)散數(shù)學焦慮最好的后悔藥。希望幫到你。本文還有配套的精品資源點擊獲取