图结构练习——最小生成树

Time Limit: 1000MS Memory limit: 65536K

题目描述

 有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。

 

输入

 输入包含多组数据,格式如下。

第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n<=100)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
 

输出

 每组输出占一行,仅输出最小花费。

示例输入

3 2
1 2 1
1 3 1
1 0

示例输出

2
0
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#define INF 99999999 using namespace std;
int sum;
int map[110][110];
int cost[110];
bool vis[110]; void prim(int n) //普利姆 最小生成树算法实现
{
sum=0;
int i, j, pos, mincost; memset(vis, false, sizeof(vis));
for(i=1; i<=n; i++)
{
cost[i]=map[1][i];
}
vis[1]=true;
for(i=1; i<n; i++)
{
mincost=INF;
for(j=1; j<=n; j++)
{
if(!vis[j] && mincost>cost[j] )
{
mincost=cost[j];
pos=j;
}
}
vis[pos]=true;
sum+=cost[pos];
for(j=1; j<=n; j++)
{
if(!vis[j] && map[pos][j]<cost[j] )
{
cost[j]=map[pos][j];
}
}
}
} int main()
{
int n, m;
int i, j;
int u, v, w;
while(cin>>n>>m)
{
for(i=0; i<=n; i++)
{
for(j=0; j<=n; j++)
{
map[i][j]=INF;
}
}
for(i=0; i<m; i++)
{
cin>>u>>v>>w;
if(map[u][v] > w)
{
map[u][v]=w;
map[v][u]=w;
}
}
prim(n);
cout<<sum<<endl;
}
return 0;
}

数据结构之 图论---最小生成树(prim + kruskal)的更多相关文章

  1. 最小生成树 Prim Kruskal

    layout: post title: 最小生成树 Prim Kruskal date: 2017-04-29 tag: 数据结构和算法 --- 目录 TOC {:toc} 最小生成树Minimum ...

  2. 数据结构与算法--最小生成树之Kruskal算法

    数据结构与算法--最小生成树之Kruskal算法 上一节介绍了Prim算法,接着来看Kruskal算法. 我们知道Prim算法是从某个顶点开始,从现有树周围的所有邻边中选出权值最小的那条加入到MST中 ...

  3. 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)

    matrix.c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include < ...

  4. 数据结构学习笔记05图(最小生成树 Prim Kruskal)

    最小生成树Minimum Spanning Tree 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 树: 无回路   |V|个顶 ...

  5. 布线问题 最小生成树 prim + kruskal

    1 : 第一种 prime     首先确定一个点 作为已经确定的集合 , 然后以这个点为中心 , 向没有被收录的点 , 找最短距离( 到已经确定的点 ) , 找一个已知长度的最小长度的 边 加到 s ...

  6. POJ 1258 Agri-Net(最小生成树 Prim+Kruskal)

    题目链接: 传送门 Agri-Net Time Limit: 1000MS     Memory Limit: 10000K Description Farmer John has been elec ...

  7. 图论——最小生成树prim+邻接表+堆优化

    今天学长对比了最小生成树最快速的求法不管是稠密图还是稀疏图,prim+邻接表+堆优化都能得到一个很不错的速度,所以参考学长的代码打出了下列代码,make_pair还不是很会,大体理解的意思是可以同时绑 ...

  8. 最小生成树-Prim&Kruskal

    Prim算法 算法步骤 S:当前已经在联通块中的所有点的集合 1. dist[i] = inf 2. for n 次 t<-S外离S最近的点 利用t更新S外点到S的距离 st[t] = true ...

  9. 邻接表c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)

    graph.c #include <stdio.h> #include <stdlib.h> #include <limits.h> #include " ...

随机推荐

  1. 小W摆石子

    可以确定, 最后围成是 一个长方形 + 多出一列 的形状. 而且多出的那一列应该是和较短的边相邻. 贴代码. #include<iostream> #include<algorith ...

  2. echarts判断点击参数类型,series为有效,markPoint 无效

    https://www.w3cschool.cn/echarts_tutorial/echarts_tutorial-7o3u28yh.html 可以设置如果点击的是markPoint,直接返回

  3. JavaScript世界万物诞生记

    作者:manxisuo链接:https://zhuanlan.zhihu.com/p/22989691来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一. 无中生有 起 ...

  4. Objective-C 协议(protocol)二

    我们前面提到了OOP的继承,我们说Objective-C不像C++可以有多重继承,Objective-C是单一继承的,如果想要做到一个类别同时拥有多种型别的能力,我们就可以通过协议来实现.Object ...

  5. log4net报错Could not load type 'System.Security.Claims.ClaimsIdentity'

    使用log4net,在win7上可以正常使用,但是在部分xp电脑上可以生成access数据库,但是无法写数据到mdb 排除了程序原因,怀疑是xp缺少什么dll之类的 偶然查到log4net的调试方法: ...

  6. PHP compact() 函数

    Compact ---- 创建一个包含变量名和它们的值的数组: <?php $firstname = "Bill"; $lastname = "Gates" ...

  7. vs项目添加链接文件

    在vs2012(或以后版本)中,从一个项目中拖拽文件到另一项目,并按住alt键,会生成链接文件. 项目文件中会生成link节点. <ItemGroup> <Compile Inclu ...

  8. 高速创建和mysql表相应的java domain实体类

    今天创建了一个表有十几个字段,创建完之后必定要写一个与之相应的java domain实体类. 这不是反复的工作吗?为什么不先把这个表的全部的字段查出来,然后放到linux环境下,用sed工具在每一行的 ...

  9. 横向卷轴(side-scrolling)地图的canvas实现

    标题有点小题大作了,实际上是实现一张看起来连续的运动背景图片. 效果如下:   // 实现原理: 图片1与图片2是两张首尾衔接的图片,图片1以一定速度移出canvas,图片2慢慢移进canvas,当图 ...

  10. jni集成第3方third party动态库libwebrtc_audio_preprocessing.so时android.mk的编写

    现在要调用一个第3方库libwebrtc_audio_preprocessing.so 最终布局如下: 即创建2个文件夹,将第3方库放进去. include目录放第3方库的头文件  其中lib目录如下 ...