單源最短路徑 Dijkstra演算法

2021-09-24 16:29:44 字數 1045 閱讀 6872

要求輸出起點到終點的最短路徑及其花費,如果最短路徑有多條路線,則輸出花費最少的。

提示

更改dijkstra演算法中關於「更近」的評判標準:有兩條路徑,當他們距離不一樣時,距離小的更近;若距離一樣時,花費少的更近。

**

//節點之間不僅有距離還有花費,輸出距離最短並且花費最少的路徑

#include#includeusing namespace std;

struct e;

vectoredge[1001];

bool mark[1001];

int dis[1001];

int sum[1001];

int main()

//初始化鄰接鍊錶

while (m--)

//求單源最短路徑

cin >> s >> t;

dis[s] = 0;

mark[s] = true;//將s加入集合k

int newp = s;

for (int i = 1; i <= n; i++)

//判斷更新陣列的條件

//在本題條件下,當距離不同時,選距離最短的那條,當距離相同時,選擇花費最少的那條

if (dis[nextp] == -1 || dis[nextp] > dis[newp] + d || (dis[nextp] == dis[newp] + d&&sum[nextp] > sum[newp] + cost))

}//選擇路徑最短的節點,加入集合k

int min = 123123;

for (int j = 1; j <= n; j++)

if (dis[j] == -1)

if (min > dis[j])

}mark[newp] = true;

} cout << dis[t] << ' ' << sum[t] << endl;

cin >> n >> m;

} return 0;

}

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra單源最短路徑

dijkstra單源最短路徑 給定乙個帶權有向圖g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。下面給出兩個計算單源最短路徑的模板。dijkstra 簡...