国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SDUT 2143 圖結構練習——最短路徑

2019-11-08 03:05:55
字體:
來源:轉載
供稿:網友

SDUT 2143 圖結構練習——最短路徑

Time Limit: 1000MS Memory Limit: 65536KB


PRoblem Description

給定一個帶權無向圖,求節點1到節點n的最短路徑。

Input

輸入包含多組數據,格式如下。 第一行包括兩個整數n m,代表節點個數和邊的個數。(n<=100) 剩下m行每行3個正整數a b c,代表節點a和節點b之間有一條邊,權值為c。

Output

每組輸出占一行,僅輸出從1到n的最短路徑權值。(保證最短路徑存在)

Example Input

3 2 1 2 1 1 3 1 1 0

Example Output

1 0


Hint

本題用到了Dijkstra算法: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html


Submit

#include <bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f3f;//表示無窮大const int MAXN = 110;int N, M;int mp[MAXN][MAXN];int dist[MAXN];//distance,記錄距離bool visit[MAXN];//記錄點是否被訪問過void dijkstra(){ int i, j, k; memset(visit, 0, sizeof(visit)); visit[1] = 1; for(i = 1; i <= N; i++)//初始化中間點為點1 { dist[i] = mp[1][i]; } for(i = 2; i <= N; i++)//中間點一共移動次數 { int Min = INF; for(j = 1; j <= N; j++)//找出中間點 { if(!visit[j] && dist[j] < Min) { Min = dist[j]; k = j;//點k為未訪問過的離點1距離最短的點,即為中間點 } } visit[k] = 1; for(j = 1; j <= N; j++)//當找到更短距離時替換原先路徑距離 if(!visit[j] && mp[k][j] != INF)//保證路徑存在且未訪問過 if(dist[j] > dist[k] + mp[k][j]) dist[j] = dist[k] + mp[k][j];//替換 } printf("%d/n",dist[N]);}int main(){ while(~scanf("%d %d", &N, &M)) { memset(mp, INF, sizeof(mp));//初始化為無窮 int i; int a, b, c; for(i = 1; i <= N; i++)//每個點到自身距離為0 mp[i][i] = 0; for(i = 1; i <= M; i++) { scanf("%d %d %d", &a, &b, &c); mp[a][b] = mp[b][a] = c < mp[a][b] ? c : mp[a][b];//mp[a][b]為兩點間存在的最短距離 } dijkstra(); } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏尼特右旗| 双牌县| 东光县| 乐都县| 苍山县| 吴忠市| 宽甸| 开阳县| 龙陵县| 翁牛特旗| 商水县| 秦安县| 鄂伦春自治旗| 武隆县| 荆门市| 泸定县| 望奎县| 北海市| 毕节市| 太仆寺旗| 肃南| 晴隆县| 龙川县| 白城市| 赣州市| 瑞金市| 赣榆县| 白银市| 抚宁县| 鄂伦春自治旗| 东海县| 荆门市| 三明市| 诸城市| 黔南| 铜鼓县| 黄浦区| 石门县| 怀远县| 临颍县| 二手房|