DS实验题 Floyd最短路径 & Prim最小生成树
题目:

提示:

Floyd最短路径算法实现(未测试):
//
// main.cpp
// Alg_Floyd_playgame
//
// Created by wasdns on 16/11/19.
// Copyright ? 2016年 wasdns. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <string.h>
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算法,请参考我的另外一篇博客:hdoj-1233-还是畅通工程
//
// main.cpp
// Prim
//
// Created by wasdns on 16/11/24.
// Copyright © 2016年 wasdns. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <string.h>
#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
DS实验题 Floyd最短路径 & Prim最小生成树的更多相关文章
- DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
- DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储
题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...
- DS实验题 Dijkstra算法
参考:Dijkstra算法 数据结构来到了图论这一章节,网络中的路由算法基本都和图论相关.于是在拿到DS的实验题的时候,决定看下久负盛名的Dijkstra算法. Dijkstra的经典应用是开放最短路 ...
- DS实验题 sights
算法与数据结构实验题 6.3 sights ★实验任务 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点, 由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱 ...
- DS实验题 order
算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从 ...
- DS实验题 PlayGame Kruskal(UnionFindSet)
题目: 思路: 有两种做法,一种是Prim算法,另外一种则是我所使用的Kruskal算法,Kruskal的算法实现可以参考:最小生成树-Prim算法和Kruskal算法,讲的已经是十分清楚了. 具体算 ...
- DS实验题 Order 已知父节点和中序遍历求前、后序
题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...
- DS实验题 Inversion
题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange ...
- DS实验题 Missile
题目: 提示:并没有精度问题. 原题 NOIP2010 导弹拦截 思路 设源点为A(x1, y1)和B(x2, y2). 第一步,用结构体存节点,包括以下元素: 1.横坐标x 2.纵坐标y 3.节点和 ...
随机推荐
- vmware安装linux.iso
安装方法 : .进入Fedora后,在虚拟机选项栏中选VM->install vmware tools 拷贝VMware Tools.tar.gz到指定文件夹,解压缩 进入超级终端:在-> ...
- cocos2dx实现经典飞机大战
游戏开始层 #ifndef __LayerGameStart_H__ #define __LayerGameStart_H__ #include "cocos2d.h" USING ...
- Codeigniter:如何写一个好的Model
本文是关于在Code Igniter PHP MVC框架中如何编写Model方法. CRUD 方法 CRUD 是Create, Retrieve, Update, and Delete的缩写. 这些是 ...
- CodeIgniter - 集成七牛云存储
最近有一个项目需要集成七牛云存储的图片存储和调用功能,程序是基于CodeIgniter2.1.3的PHP框架.刚拿到手完全无从下手的感觉,因为像框架这种东西,想从官方的PHPSDK集成进去,需要改动很 ...
- wp8 导航方法
全局跳转 (App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Tools/SpatialQueryCha ...
- php加密解密
<?php . [代码][PHP]代码 <?php , ; return setcookie($name, $value, $expire, $path, $do ...
- hdu 1215 筛法
求小于n的n的因子之和 Sample Input 3 2 10 20Sample Output 1 8 22 #include<cstdio> #include<iostream&g ...
- C#学习笔记(八)——定义类的成员
一.成员的定义 1.定义字段 class Myclass { public int MyInt; } 可以使用readonly关键字,表示这个字段只能在执行构造函数的过程中赋值,或者由初始化语句赋值. ...
- 【T_SQL】 基础 视图、存储过程、触发器
合作对于我来说,真的很重要,不仅仅是我从中学到了什么技术,更加重要的是我从中学到了如何去协调,如何去处理团队之间的关系,不要误会,我不是组长,但是我们每个人都是组长.在漫长的编译代码的过程中,真的很烦 ...
- 玩转Android Camera开发(一):Surfaceview预览Camera,基础拍照功能完整demo
杂家前文是在2012年的除夕之夜仓促完成,后来很多人指出了一些问题,琐事缠身一直没有进行升级.后来随着我自己的使用,越来越发现不出个升级版的demo是不行了.有时候就连我自己用这个demo测一些性能. ...