迪傑斯特拉演算法 Dijkstra

2022-05-05 10:21:13 字數 2482 閱讀 4797

目錄引入以及介紹

在經過我們學習了廣度優先搜尋(如果不知道的話...點這裡)之後,我們已經可以找到了從a點到達e點的一條最短路徑。只不過尋找這個路徑比較麻煩,並且浪費時間。

當然,我們經過廣度優先搜尋的路徑,只能說是乙個最短路徑,因為它經過的路的條數是最少的。就好比如下面的......

如果我們給這些道路加上了一些東西,比如什麼呢,加上了一些從開始地點到達結束地點的時間的話,那麼你就可以發現了,我們剛剛利用廣度優先搜尋所得的路徑並不是最省時間的。同時的話,你還可以發現一條更短的路徑......

在學習廣度優先搜尋的時候,我們是找出了路徑最短的那個路徑,也就是,段數最少的那個路段。而接下來我們要進行學習尋找路徑最短的路徑,而不是段數最短的那個。

------>這返回

我們首先來看一下我們想要走的一幅圖:

這幅圖中,你可以把每個數字認為是走這條路徑到另乙個城市所需要的時間。然後我們要從我們的起點出發,找到一條耗時最短的路徑......

其實迪傑斯特拉演算法演算法的主要是包含了下面的四個步驟,這是《演算法**給出的》

經過解讀後,就大概是這樣的.....

對於一幅這樣的圖(借鑑《演算法導論》的圖)來說.....

我們首先從源點出發,也就是我們圖中的a點,然後從a點出發,我們尋找最小的邊,也就是我們找到了從 a->b 這一條邊了,然後我們把從a點到b點的距離更新,原本是無窮大,現在更新為5,同時a到c點更新為10.

緊接著,我們選擇小的那條邊,到了b城市。我們在b城市中選擇。從b城市可以到達c、d、e城市,那麼我們相對應的給他們附上值.....

依次這樣,之後我們把所有的點都更新完了.......

我們再來看看乙個動態的.....

**執行圖

------>這返回

接下來到了我們學習**的時候了( ̄▽ ̄)"

main.cpp

#include"dijkstra.h"

int main()/*8

0 2 8

0 3 7

0 4 1

1 0 7

2 0 1

2 1 6

2 6 2

3 1 7

3 7 9

4 2 9

5 1 8

5 7 7

6 2 8

6 4 8

6 5 3

7 5 9

-1 -1 -1

0*/

dijkstra.h
#pragma once

#ifndef _dijkstra_h_

#define _dijkstra_h_

#include#include#include#includeusing namespace std;

struct node

};//可以用迭代器指標去模擬

class dijkstragraph //使用鄰接表來儲存

;#endif

dijkstra.cpp
// dijkstra.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

#include "dijkstra.h"

void dijkstragraph::init()

cout << "儲存好了鄰接表" << endl;

}void dijkstragraph::dijkstra()

}for (int j = 0; j < pointnumber; j++) //找沒經歷過的最小的元素值}}

}void dijkstragraph::output()

s.push(this->start);

while (!s.empty())

cout << "\t\t 距離是:" << distance[i] << endl;

}cout << "------------------------" << endl;

}

------>這返回

參考《演算法**》、《演算法導論》、《資料結構與演算法c語言版》

Dijkstra(迪傑斯特拉)演算法

迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。指定乙個節點,例如我們要計算 a 到其他節點的最短路徑 引入兩個集合 s u s集合包含已求出的最短路徑的點 以及相...

dijkstra迪傑斯特拉演算法

注意 1.標頭檔案climits的int max,加上2整數會溢位,每次相加前得判斷被加值是否為int max,int max 10為負數 2.得先初始化再對d s c s g,cost等賦值 fill d 0 d 0 max,int max fill g 0 0 g 0 0 max max,int...

迪傑斯特拉 Dijkstra 演算法

迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。通過dijkstra計算圖g中的最短路徑時,需要指定起點s 即從頂點s開始計算 dijkstra演算法算是貪心思想實...