国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【圖論】Dijkstra 算法求最短路 - 構(gòu)建鄰接矩陣(帶權(quán)無向圖)

這篇具有很好參考價值的文章主要介紹了【圖論】Dijkstra 算法求最短路 - 構(gòu)建鄰接矩陣(帶權(quán)無向圖)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

例題:到達(dá)目的地的方案數(shù)

題目鏈接:1976. 到達(dá)目的地的方案數(shù)

題目描述

【圖論】Dijkstra 算法求最短路 - 構(gòu)建鄰接矩陣(帶權(quán)無向圖),基礎(chǔ)算法練習(xí),圖論,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-842349.html

代碼與解題思路

func countPaths(n int, roads [][]int) int {
    g := make([][]int, n) // 構(gòu)建鄰接矩陣
    for i, _ := range g {
        g[i] = make([]int, n)
        for j, _ := range g[i] {
            g[i][j] = math.MaxInt / 2 // 到不了的地方就是無限大(初始化成這個值)
        }
    }
    for _, v := range roads { // 無向圖
        x, y, d := v[0], v[1], v[2]
        g[x][y] = d
        g[y][x] = d
    }

    dis := make([]int, n) // dis 數(shù)組存儲從起點(diǎn)到每個節(jié)點(diǎn)的當(dāng)前已知最短距離
    for i := 1; i < n; i++ {
        dis[i] = math.MaxInt / 2
    }

    f := make([]int, n) // 存儲到達(dá)每個節(jié)點(diǎn)的最短路徑數(shù)
    f[0] = 1 // 到自己是一條
    done := make([]bool, n) // 標(biāo)記每個節(jié)點(diǎn)是否被處理
    for {
        x := -1
        for i, ok := range done { 
            // 找下一個未被處理的節(jié)點(diǎn),x < 0 代表第一次進(jìn)去
            // 而 x 代表的是未被處理過的節(jié)點(diǎn)中,到起點(diǎn)距離最短的節(jié)點(diǎn)
            if ok == false && (x < 0 || dis[i] < dis[x]) {
                x = i
            }
        }
        if x == n-1 { // 走到第 n-1 個節(jié)點(diǎn)了
            return f[n-1]
        }
        done[x] = true // 這個節(jié)點(diǎn)被處理了
        // 遍歷從 x 出發(fā)能直接走到的所有下一個節(jié)點(diǎn)
        // g[x] 的下標(biāo)是 y, 存的值是 d
        for y, d := range g[x] {
            newDis := dis[x] + d // 遍歷到到下一個節(jié)點(diǎn)的所有距離(當(dāng)前距離+每條路的邊權(quán))
            if newDis < dis[y] { // 找到了一條更短的路徑
                dis[y] = newDis  // 更新 dis[y]
                f[y] = f[x]      // 下一個節(jié)點(diǎn)就是 y,讓 f[y] 繼承前面的路徑數(shù)量
            } else if newDis == dis[y] { // 又多了一條最短路徑
                f[y] = (f[y] + f[x]) % 1_000_000_007 // 路徑的情況就多了 f[x] 種(可以畫圖理解)
            }
        }
    }
}

構(gòu)建帶權(quán)無向圖的鄰接矩陣

g := make([][]int, n) // 構(gòu)建鄰接矩陣
for i, _ := range g {
    g[i] = make([]int, n)
    for j, _ := range g[i] {
        g[i][j] = math.MaxInt / 2 // 到不了的地方就是無限大(初始化成這個值)
    }
}
for _, v := range roads { // 無向圖
    x, y, d := v[0], v[1], v[2]
    g[x][y] = d
    g[y][x] = d
}

到了這里,關(guān)于【圖論】Dijkstra 算法求最短路 - 構(gòu)建鄰接矩陣(帶權(quán)無向圖)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Dijkstra算法求最短路

    Dijkstra算法求最短路

    Dijkstra算法的流程如下: 1.初始化dist[1] = 0,其余節(jié)點(diǎn)的dist值為無窮大。 2.找出一個未被標(biāo)記的、dist[x]最小的節(jié)點(diǎn)x,然后標(biāo)記節(jié)點(diǎn)x。 3.掃描節(jié)點(diǎn)x的所有出邊(x,y,z),若dist[y] dist[x] + z,則使用dist[x] + z更新dist[y]。 4.重復(fù)上述2~3兩個步驟,直到所有的節(jié)點(diǎn)都被標(biāo)記。 Dijk

    2024年02月06日
    瀏覽(21)
  • 圖算法——求最短路徑(Dijkstra算法)

    圖算法——求最短路徑(Dijkstra算法)

    ? ? ? ? 目錄 一、什么是最短路徑 二、迪杰斯特拉(Dijkstra)算法 ?三、應(yīng)用Dijkstra算法 (1) Dijkstra算法函數(shù)分析 ????????求圖的最短路徑在實際生活中有許多應(yīng)用,比如說在你在一個景區(qū)的某個景點(diǎn),參觀完后,要怎么走最少的路程到你想?yún)⒂^的下個景點(diǎn),這就利用到

    2023年04月15日
    瀏覽(20)
  • 迪杰斯特拉(Dijkstra's )算法——解決帶權(quán)有向無向圖最短路徑

    迪杰斯特拉(Dijkstra's )算法——解決帶權(quán)有向無向圖最短路徑

    迪杰斯特拉算法(Dijkstra\\\'s Algorithm),又稱為狄克斯特拉算法,是一種用于解決帶權(quán)重有向圖或無向圖最短路徑問題的算法。該算法由荷蘭計算機(jī)科學(xué)家艾茲赫爾·狄克斯特拉在1956年發(fā)明,是一種廣泛應(yīng)用于網(wǎng)絡(luò)路由和其他領(lǐng)域的算法。 在 2001 年的一次采訪中,Dijkstra 博士透露

    2024年02月03日
    瀏覽(26)
  • 【C語言\數(shù)據(jù)結(jié)構(gòu)】圖dijkstra最短路徑 鄰接矩陣(無項、有權(quán))代碼簡單實現(xiàn)深度解析

    【C語言\數(shù)據(jù)結(jié)構(gòu)】圖dijkstra最短路徑 鄰接矩陣(無項、有權(quán))代碼簡單實現(xiàn)深度解析

    這個代碼是在圖的鄰接矩陣(無項、有權(quán))的代碼的基礎(chǔ)上,添加了dijkstra最短路徑函數(shù),并且修改測試用例和主函數(shù)代碼,圖的鄰接矩陣(無項、有權(quán))的代碼具體請查看 【C語言數(shù)據(jù)結(jié)構(gòu)】圖之鄰接矩陣(無向、有權(quán))代碼簡單實現(xiàn),這里就不過多贅述。 我們用一個案例

    2024年02月03日
    瀏覽(34)
  • 12.圖論1 最短路之dijkstra算法

    二分圖 判定:染色法。 性質(zhì): 可以二著色。 無奇圈。 樹的直徑模板 兩遍dfs/bfs,證明時反證法的核心是用假設(shè)推出矛盾。 設(shè)1是一開始隨機(jī)選的點(diǎn),s是與其最遠(yuǎn)的點(diǎn),證明s是直徑的一端。 反證:假設(shè)s不是直徑的一端,ss是直徑的一端。 現(xiàn)在要做的就是證明ss是直徑的一端

    2024年02月20日
    瀏覽(18)
  • 圖論算法基礎(chǔ):單源最短路徑Dijkstra算法分析

    圖論算法基礎(chǔ):單源最短路徑Dijkstra算法分析

    在 有向帶權(quán)圖 中給定一個起始頂點(diǎn)(源點(diǎn)),Dijkstra算法可以求出 所有其他頂點(diǎn) 到源點(diǎn)的最短路徑,Dijkstra算法 不能用于同時含有正負(fù)權(quán)值的邊的圖 Source 頂點(diǎn)集合:已經(jīng)確定 到源點(diǎn)的最短路徑 的頂點(diǎn)就會加入 Source 集合中, Source 集合初始時只有源點(diǎn) dist 數(shù)組:用于記錄每個頂點(diǎn)到

    2024年02月11日
    瀏覽(29)
  • 【圖論算法】最短路徑算法(無權(quán)最短路徑、Dijkstra算法、帶負(fù)邊值的圖、無圈圖)

    【圖論算法】最短路徑算法(無權(quán)最短路徑、Dijkstra算法、帶負(fù)邊值的圖、無圈圖)

    本篇博客將考察各種最短路徑問題。 ????無權(quán)最短路徑 ????Dijkstra 算法 ????具有負(fù)邊值的圖 ????無圈圖 ????所有頂點(diǎn)對間的最短路徑 ????最短路徑的例子–詞梯游戲 輸入是一個賦權(quán)圖:與每條邊 (v i , v j ) 相聯(lián)系的是穿越該邊的開銷(或稱為值

    2023年04月12日
    瀏覽(22)
  • 圖論:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)詳細(xì)版

    圖論:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)詳細(xì)版

    終于是學(xué)完了,這個最短路我學(xué)了好幾天,當(dāng)然也學(xué)了別的算法啦,也是非常的累啊。 話不多說下面看看最短路問題吧。 最短路問題是有向圖,要求的是圖中一個點(diǎn)到起點(diǎn)的距離,其中我們要輸入點(diǎn)和點(diǎn)之間的距離,來求最短路。 下面分為幾類題目: 單源匯最短路--一個起

    2024年01月21日
    瀏覽(27)
  • Dijkstra算法——鄰接矩陣實現(xiàn)+路徑記錄

    Dijkstra算法——鄰接矩陣實現(xiàn)+路徑記錄

    本文是在下面這篇文章的基礎(chǔ)上做了一些補(bǔ)充,增加了路徑記錄的功能。具體Dijkstra的實現(xiàn)過程可以參考下面的這篇文章。 [jarvan:Dijkstra算法詳解 通俗易懂](Dijkstra算法詳解 通俗易懂 - jarvan的文章 - 知乎 https://zhuanlan.zhihu.com/p/338414118) 創(chuàng)建 GraphAdjMat 類 GraphAdjMat 類用來實現(xiàn)圖的

    2024年01月18日
    瀏覽(25)
  • 圖論14-最短路徑-Dijkstra算法+Bellman-Ford算法+Floyed算法

    圖論14-最短路徑-Dijkstra算法+Bellman-Ford算法+Floyed算法

    https://github.com/Chufeng-Jiang/Graph-Theory/tree/main/src/Chapter11_Min_Path 2.4.1 判斷某個頂點(diǎn)的連通性 2.4.2 求源點(diǎn)s到某個頂點(diǎn)的最短路徑 存放節(jié)點(diǎn)編號和距離 這里的缺點(diǎn)就是,更新node時候,會重復(fù)添加節(jié)點(diǎn)相同的node,但是路徑值不一樣。不影響最后結(jié)果。 更新pre數(shù)組 輸出路徑 初始化兩

    2024年02月04日
    瀏覽(48)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包