博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DS实验题 Floyd最短路径 & Prim最小生成树
阅读量:6570 次
发布时间:2019-06-24

本文共 3324 字,大约阅读时间需要 11 分钟。

题目:

885822-20161124184119628-608000056.png

提示:

885822-20161124184159971-388352057.png

Floyd最短路径算法实现(未测试):

//  //  main.cpp  //  Alg_Floyd_playgame  //  //  Created by wasdns on 16/11/19.  //  Copyright ? 2016年 wasdns. All rights reserved.  //    #include 
#include
#include
#include
#include
using namespace std; #define endless 1000000001; int Floydgh[5005][5005]; void Inigh(int n) { for (int i = 1; i <= n; i++) { Floydgh[i][i] = 0; for (int j = 1; j <= n; j++) { if (i != j) { Floydgh[i][j] = endless; } } } } void Creatgh(int n, int m) { Inigh(n); int i, u, v, w; for (i = 1; i <= m; i++) { cin >> u >> v >> w; Floydgh[u][v] = w; Floydgh[v][u] = w; } } void Alg_Floyd(int n) { int i, j, k; for (k = 1; k <= n; k++) { for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { int t = Floydgh[i][k] + Floydgh[k][j]; if (t < Floydgh[i][j]) { Floydgh[i][j] = t; Floydgh[j][i] = t; } } } } } int minjudge(int n) { int i, j; int minlen = endless; for (i = 1; i <= n; i++) { int cnt = 0; for (j = 1; j <= n; j++) { cnt += Floydgh[i][j]; } if (cnt < minlen) { minlen = cnt; } } return minlen; } int main() { int n, m; cin >> n >> m; Creatgh(n, m); Alg_Floyd(n); cout << minjudge(n) << endl; return 0; }

Prim生成树算法实现:

关于Prim算法,请参考我的另外一篇博客:

////  main.cpp//  Prim////  Created by wasdns on 16/11/24.//  Copyright © 2016年 wasdns. All rights reserved.//#include 
#include
#include
#include
#include
#include
#define maxn 10000005;using namespace std;int Primgh[10000][10000];bool refer[10005];void Initial(int n, int m){ int i, j; for (i = 1; i <= n; i++) { refer[i] = false; for (j = 1; j <= n; j++) { if (i == j) { Primgh[i][j] = 0; } else Primgh[i][j] = maxn; } } int u, v, w; for (i = 1; i <= m; i++) { cin >> u >> v >> w; Primgh[u][v] = w; Primgh[v][u] = w; }}int Prim_Alg(int n, int m){ Initial(n, m); int i, j, k; int ans = 0; refer[1] = true; //起点为1 for (i = 1; i <= n-1; i++) { int minlen = maxn; int rcd = 1; for (j = 1; j <= n; j++) { if (!refer[j]) continue; int len1 = maxn; int rcd1 = 1; for (k = 1; k <= n; k++) { if (!refer[k]) { if (Primgh[j][k] < len1) { len1 = Primgh[j][k]; rcd1 = k; } } } if (len1 < minlen) { minlen = len1; rcd = rcd1; } } //char check = 'A'+rcd-1; //cout << "rcd: " << check << endl; //cout << "minlen: " << minlen << endl; refer[rcd] = true; rcd = 1; ans += minlen; } return ans;}int main(){ int n, m; cin >> n >> m; cout << Prim_Alg(n, m) << endl; return 0;}

测试样例:

/* eg1.   Input: 4 6 1 2 1 2 3 2 1 3 3 2 4 3 3 4 5 1 4 4  Output: 6  eg2.  Input: 7 11 1 2 7 1 4 5 2 4 9 2 3 8 2 5 7 3 5 5 4 5 15 4 6 6 5 6 8 5 7 9 6 7 11  Output: 39 */

2016/11/24

转载地址:http://xlpjo.baihongyu.com/

你可能感兴趣的文章
Sublime Text 3 遇到的一些小坑的解决方法
查看>>
JSP之9大对象
查看>>
sql 递归查询
查看>>
KMP C++
查看>>
HDU1506 Largest Rectangle in a Histogram(算竞进阶习题)
查看>>
HTTP响应状态码
查看>>
crushmap磁盘智能分组
查看>>
《算法导论》读书笔记--第三章 函数的增长
查看>>
《利用python进行数据分析》读书笔记--第八章 绘图和可视化
查看>>
栈的操作
查看>>
Flask 备注一(单元测试,Debugger, Logger)
查看>>
ElasticSearch(八):springboot集成ElasticSearch集群并使用
查看>>
Java基础学习_01 概述及环境配置
查看>>
20165239其米仁增3
查看>>
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
P2657 [SCOI2009]windy数 数位dp入门
查看>>
Elasticsearch 运维实战之1 -- 集群规划
查看>>
jetty安装、配置、优化
查看>>
Android-环境问题
查看>>
Android- assent和raw的区别
查看>>