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

貪心法——迪杰斯特拉算法

這篇具有很好參考價(jià)值的文章主要介紹了貪心法——迪杰斯特拉算法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

問(wèn)題描述:

迪杰斯特拉算法
Time Limit:?2000 MS Memory Limit:?5000 KB

Description

給定n(n<=500)個(gè)頂點(diǎn),以及E(E<=10000)條邊,使用迪杰斯特拉算法計(jì)算頂點(diǎn)s到頂點(diǎn)t的最短路徑.

Input

第一行輸入T表示有T組數(shù)據(jù)。每組數(shù)據(jù)第一行輸入n、E、s、t,分別表示頂點(diǎn)數(shù)、邊數(shù)、頂點(diǎn)s以及頂點(diǎn)t. 接下來(lái)
輸入E行每行三個(gè)正整數(shù)u(1<=u<=n)、v(1<=v<=n)、w,表示頂點(diǎn)u到頂點(diǎn)v之間無(wú)向邊長(zhǎng)度w(可能有重邊)。

Output

輸出T行正整數(shù),第i行表示第i組數(shù)據(jù)s到達(dá)t的最短路徑長(zhǎng)度。若s無(wú)法到達(dá)t國(guó),輸出-1.

Sample Input

3
2 2 1 2
1 2 1
1 2 2
3 1 1 3
2 3 1
3 3 1 3
1 2 1
1 2 3
2 3 1

Sample Output

1
-1
2

問(wèn)題分析:

狄克斯特拉算法?是從一個(gè)頂點(diǎn)到其余各頂點(diǎn)的最短路徑算法,解決的是有權(quán)圖中最短路徑問(wèn)題。 迪杰斯特拉算法主要特點(diǎn)是從起始點(diǎn)開(kāi)始,采用貪心算法的策略,每次遍歷到始點(diǎn)距離最近且未訪問(wèn)過(guò)的頂點(diǎn)的鄰接節(jié)點(diǎn),直到擴(kuò)展到終點(diǎn)為止。

可以使用兩個(gè)數(shù)組,一個(gè)記錄是否已經(jīng)找到最短路徑,另一個(gè)用于記錄找到的最短路徑值,?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-434553.html

代碼示例:

#include <iostream>
#include <cstring>
using namespace std;

const int N = 510, M = 10010, INF = 0x3f3f3f3f;

int n, m, s, t;
int h[N], e[M], w[M], ne[M], idx; // 鄰接表存儲(chǔ)圖
int dist[N]; // dist[i] 表示起點(diǎn)到 i 的最短距離
bool st[N]; // st[i] 表示 i 是否已經(jīng)確定了最短路

void add(int a, int b, int c) {
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++; // 添加一條從 a 到 b 權(quán)值為 c 的邊
}

int dijkstra() {
    memset(dist, 0x3f, sizeof dist); // 將 dist 數(shù)組全部初始化為 INF,表示起點(diǎn)到所有點(diǎn)的距離都未知
    dist[s] = 0; // 起點(diǎn)到自身的距離為 0
    for (int i = 0; i < n; i++) { // 迭代 n 次,每次確定一個(gè)最短路
        int t = -1; // t 記錄還未確定最短路的點(diǎn)中,離起點(diǎn)最近的點(diǎn)
        for (int j = 1; j <= n; j++) // 找離起點(diǎn)最近的點(diǎn)
            if (!st[j] && (t == -1 || dist[t] > dist[j]))
                t = j;
        st[t] = true; // 標(biāo)記 t 已經(jīng)確定了最短路
        for (int j = h[t]; ~j; j = ne[j]) { // 用 t 更新其他點(diǎn)的距離
            int k = e[j];
            if (dist[k] > dist[t] + w[j])
                dist[k] = dist[t] + w[j];
        }
    }
    if (dist[t] == INF) return -1; // t 不可達(dá),返回 -1
    else return dist[t]; // 返回起點(diǎn)到 t 的最短距離
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> n >> m >> s >> t;
        memset(h, -1, sizeof h);
        idx = 0;
        for (int i = 0; i < m; i++) {
            int a, b, c;
            cin >> a >> b >> c;
            add(a, b, c), add(b, a, c); // 添加一條無(wú)向邊
        }
        cout << dijkstra() << endl;
    }
    return 0;
}

運(yùn)行結(jié)果:

到了這里,關(guān)于貪心法——迪杰斯特拉算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 最短路徑:迪杰斯特拉算法

    最短路徑:迪杰斯特拉算法

    簡(jiǎn)介 ????????英文名Dijkstra ????????作用:找到路中指定起點(diǎn)到指定終點(diǎn)的帶權(quán)最短路徑 核心步驟 ????????1)確定起點(diǎn),終點(diǎn) ????????2)從未走過(guò)的點(diǎn)中選取從起點(diǎn)到權(quán)值最小點(diǎn)作為中心點(diǎn) ????????3)如果滿足 起點(diǎn)到中心點(diǎn)權(quán)值 + 中心點(diǎn)到指定其他點(diǎn)的

    2024年02月08日
    瀏覽(22)
  • 最短路徑——迪杰斯特拉算法

    最短路徑——迪杰斯特拉算法

    日常生活中常常涉及最短路徑問(wèn)題,如在一個(gè)城市交通網(wǎng)中,如何選取從起點(diǎn)到達(dá)終點(diǎn)的路徑,才能使這一趟旅程的路程最短?或所需時(shí)間最少?或所需交通費(fèi)用最低?諸如此類問(wèn)題都可以抽象為 求解圖的最短路徑問(wèn)題 。我們把 圖的頂點(diǎn) 表示為 城市的交通站點(diǎn) , 邊表示交

    2024年02月04日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】迪杰斯特拉算法

    【數(shù)據(jù)結(jié)構(gòu)與算法】迪杰斯特拉算法

    介紹 迪杰斯特拉(Dijkstra)算法是 典型最短路徑算法 ,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他節(jié)點(diǎn)的最短路徑。它的主要特點(diǎn)是以中心向外層層擴(kuò)展(廣度優(yōu)先搜索思想),直到擴(kuò)展到終點(diǎn)為止。 算法過(guò)程 設(shè)置出發(fā)頂點(diǎn)為 v,頂點(diǎn)集合 V{v1,v2,v3…vi},v 到 V 中各頂點(diǎn)的距離構(gòu)成距離集合

    2024年02月11日
    瀏覽(49)
  • 迪杰斯特拉算法(求最短路徑)

    迪杰斯特拉算法(求最短路徑)

    迪杰斯特拉算法用于查找圖中某個(gè)頂點(diǎn)到其它所有頂點(diǎn)的最短路徑,該算法既適用于無(wú)向加權(quán)圖,也適用于有向加權(quán)圖。 注意,使用迪杰斯特拉算法查找最短路徑時(shí),必須保證圖中所有邊的權(quán)值為非負(fù)數(shù),否則查找過(guò)程很容易出錯(cuò)。 迪杰斯特拉算法的實(shí)現(xiàn)思路 圖 1 是一個(gè)無(wú)

    2024年02月02日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)--迪杰斯特拉(Dijkstra)算法

    數(shù)據(jù)結(jié)構(gòu)--迪杰斯特拉(Dijkstra)算法

    生活封鎖了我們,只要我們的心不死,生活便永遠(yuǎn)不是一汪死水,而我們,依然會(huì)綻放最美的姿態(tài)。 戴克斯特拉算法(英語(yǔ):Dijkstra’s algorithm),又稱迪杰斯特拉算法、Dijkstra算法,是由荷蘭計(jì)算機(jī)科學(xué)家艾茲赫爾·戴克斯特拉在1956年發(fā)現(xiàn)的算法,并于3年后在期刊上發(fā)表。

    2024年02月04日
    瀏覽(26)
  • dijkstra迪杰斯特拉算法(鄰接表法)

    dijkstra迪杰斯特拉算法(鄰接表法)

    算法簡(jiǎn)易過(guò)程: 求單源有向圖最短路徑 使用 鄰接表法 來(lái)存儲(chǔ)頂點(diǎn)和邊,錄入 有向圖 。 (當(dāng)然也可以無(wú)向圖,不過(guò)錄入時(shí)要錄入兩次,比如 a b 3? ? ? ? b a 3) ?代碼如下: 測(cè)試如下: ?

    2024年02月07日
    瀏覽(33)
  • (迪杰斯特拉)Dijkstra算法及其優(yōu)化(C++)

    (迪杰斯特拉)Dijkstra算法及其優(yōu)化(C++)

    題目描述 給定一個(gè) n n n 個(gè)點(diǎn) m m m 條邊的有向圖,圖中可能存在重邊和自環(huán),所有邊權(quán)均為非負(fù)值。 請(qǐng)你求出 1 1 1 號(hào)點(diǎn)到 n n n 號(hào)點(diǎn)的最短距離,如果無(wú)法從 1 1 1 號(hào)點(diǎn)走到 n n n 號(hào)點(diǎn),則輸出 ? 1 ?1 ? 1 。 輸入格式 第一行包含整數(shù) n n n 和 m m m 。 接下來(lái) m m m 行每行包含三

    2023年04月09日
    瀏覽(31)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)記錄——圖-最短路徑問(wèn)題(無(wú)權(quán)圖單源最短路徑算法、有權(quán)圖單源最短路徑算法、多源最短路徑算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)記錄——圖-最短路徑問(wèn)題(無(wú)權(quán)圖單源最短路徑算法、有權(quán)圖單源最短路徑算法、多源最短路徑算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)

    目錄 問(wèn)題分類? 無(wú)權(quán)圖單源最短路徑算法 思路 偽代碼 時(shí)間復(fù)雜度 代碼實(shí)現(xiàn)(C語(yǔ)言) 有權(quán)圖單源最短路徑算法 Dijkstra(迪杰斯特拉)算法 偽代碼? 時(shí)間復(fù)雜度? 代碼實(shí)現(xiàn)(C語(yǔ)言) 多源最短路徑算法 兩種方法 Floyd算法 代碼實(shí)現(xiàn)(C語(yǔ)言) 最短路徑問(wèn)題的抽象 在網(wǎng)絡(luò)中,求

    2024年02月08日
    瀏覽(21)
  • 迪杰斯特拉算法 – 圖的單源最短路徑

    迪杰斯特拉算法 – 圖的單源最短路徑

    迪杰斯特拉算法是由荷蘭計(jì)算機(jī)科學(xué)家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是從一個(gè)頂點(diǎn)到其余各頂點(diǎn)的最短路徑算法,解決的是有權(quán)圖中最短路徑問(wèn)題。迪杰斯特拉算法主要特點(diǎn)是以起始點(diǎn)為中心向外層層擴(kuò)展,直到擴(kuò)展到終點(diǎn)為止。迪杰斯特拉算法采

    2024年02月05日
    瀏覽(31)
  • C語(yǔ)言 最短路徑 迪杰斯特拉(Dijkstra)算法

    C語(yǔ)言 最短路徑 迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法是由荷蘭計(jì)算機(jī)科學(xué)家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是從一個(gè)頂點(diǎn)到其余各頂點(diǎn)的最短路徑算法,解決的是有權(quán)圖中單源最短路徑問(wèn)題。迪杰斯特拉算法主要特點(diǎn)是從起始點(diǎn)開(kāi)始,采用貪心算法的策略,每次遍歷到始點(diǎn)距離最

    2024年02月03日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包