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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

圖結(jié)構(gòu)練習(xí)——最短路徑(Dijkstra算法)

2019-11-08 03:08:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

think: 1注意重復(fù)邊的覆蓋 2注意map數(shù)組的初始化 3注意dist數(shù)組的初始化

sdut原題鏈接

圖結(jié)構(gòu)練習(xí)——最短路徑 Time Limit: 1000MS Memory Limit: 65536KB

PRoblem Description 給定一個(gè)帶權(quán)無(wú)向圖,求節(jié)點(diǎn)1到節(jié)點(diǎn)n的最短路徑。

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

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

Example Input 3 2 1 2 1 1 3 1 1 0

Example Output 1 0

Hint

Author 趙利強(qiáng)

以下為accepted代碼

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define INF 0x3f3f3f3fint n, m;int map[104][104], vis[104], dist[104];void Dijkstra(int v){ int i, j, k; for(i = 1; i <= n; i++)//dist數(shù)組的初始化 { dist[i] = map[v][i]; vis[i] = 0; } dist[v] = 0; vis[v] = 1; for(i = 0; i < n-1; i++) { int min = INF, u = v; for(j = 1; j <= n; j++)//尋找未標(biāo)記結(jié)點(diǎn)的最小值 { if(vis[j] == 0 && dist[j] < min) { u = j; min = dist[j]; } } vis[u] = 1; for(k = 1; k <= n; k++)//更新最短路 { if(vis[k] == 0 && map[u][k] < INF && dist[k] > dist[u] + map[u][k]) { dist[k] = dist[u] + map[u][k]; } } }}int main(){ int i, j, a, b, c; while(scanf("%d %d", &n, &m) != EOF) { memset(vis, 0, sizeof(vis)); for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { if(i == j) map[i][j] = 0; else map[i][j] = INF; } } for(i = 0; i < m; i++) { scanf("%d %d %d", &a, &b, &c); if(map[a][b] > c)///避免覆蓋最短路 map[a][b] = map[b][a] = c; } if(m == 0) printf("0/n"); else { Dijkstra(1); printf("%d/n", dist[n]); } } return 0;}/***************************************************User name: Result: AcceptedTake time: 12msTake Memory: 208KBSubmit time: 2017-02-17 19:30:41****************************************************/

以下為wrong answer代碼——Dijkstra算法理解不扎實(shí),導(dǎo)致變量位置使用錯(cuò)誤(將u的位置寫(xiě)成了v)

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define INF 0x3f3f3f3fint n, m;int map[104][104], vis[104], dist[104];void Dijkstra(int v){ int i, j, k; for(i = 1; i <= n; i++)//dist數(shù)組的初始化 { dist[i] = map[v][i]; vis[i] = 0; } dist[v] = 0; vis[v] = 1; for(i = 0; i < n-1; i++) { int min = INF, u = v; for(j = 1; j <= n; j++)//尋找未標(biāo)記結(jié)點(diǎn)的最小值 { if(vis[j] == 0 && dist[j] < min) { u = j; min = dist[j]; } } vis[u] = 1; for(k = 1; k <= n; k++)//更新最短路 { if(vis[k] == 0 && map[v][k] < INF && dist[k] > dist[u] + map[u][v]) { dist[k] = dist[u] + map[u][k]; } } }}int main(){ int i, j, a, b, c; while(scanf("%d %d", &n, &m) != EOF) { memset(vis, 0, sizeof(vis)); for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { if(i == j) map[i][j] = 0; else map[i][j] = INF; } } for(i = 0; i < m; i++) { scanf("%d %d %d", &a, &b, &c); if(map[a][b] > c)///避免覆蓋最短路 map[a][b] = map[b][a] = c; } if(m == 0) printf("0/n"); else { Dijkstra(1); printf("%d/n", dist[n]); } } return 0;}/***************************************************User name: Result: Wrong AnswerTake time: 16msTake Memory: 208KBSubmit time: 2017-02-17 19:27:15****************************************************/

以下為wrong answer代碼—— 1 沒(méi)有考慮到重復(fù)邊的覆蓋問(wèn)題 2 map數(shù)組初始化錯(cuò)誤

#include <stdio.h>#include <string.h>#define INF 9999999int n, m;int map[104][104], dist[10400], vis[10400];void Dijkstra(int v){ for(int i = 1; i <= n; i++) { dist[i] = map[v][i]; vis[i] = 0; } vis[v] = 1; dist[v] = 0; for(int i = 0; i < n-1; i++) { int min = INF, u = v; for(int j = 1; j <= n; j++)//尋找未訪問(wèn)的結(jié)點(diǎn)中的最小值 { if(vis[j] == 0 && dist[j] < min) { u = j; min =dist[j]; } } vis[u] = 1; for(int k = 1; k <= n; k++)//更新 { if(vis[k] == 0 && map[u][k] < INF && dist[k] > dist[u] + map[u][k]) { dist[k] = dist[u] + map[u][k]; } } }}int main(){ int a, b, c; while(scanf("%d %d", &n, &m) != EOF) { memset(map, 0, sizeof(map)); memset(vis, 0, sizeof(vis)); for(int i = 0; i < m; i++) { scanf("%d %d %d", &a, &b, &c); map[a][b] = c; } Dijkstra(1); printf("%d/n", dist[n]); } return 0;}/***************************************************User name: Result: Wrong AnswerTake time: 12msTake Memory: 192KBSubmit time: 2017-02-17 18:41:44****************************************************/
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柘荣县| 调兵山市| 永安市| 绥棱县| 长春市| 五峰| 宝兴县| 平江县| 岫岩| 大埔区| 南和县| 漳浦县| 岳阳市| 荆州市| 佛冈县| 社旗县| 临清市| 岑溪市| 洛宁县| 会理县| 综艺| 广平县| 东乌珠穆沁旗| 忻城县| 常德市| 安化县| 南溪县| 墨玉县| 高要市| 柘荣县| 高尔夫| 新邵县| 容城县| 贵定县| 桃江县| 绿春县| 大厂| 麦盖提县| 靖安县| 桂阳县| 安庆市|