poj_1258 prim最小生成树
题目大意
给定N个点,以及每两个点之间的路径长度,求出一个连接这N个点的方案,使得连接这N个点的总长度最短,求出该总长度。
题目分析
求最小生成树MST的模板题,直接使用prim算法进行求解。
实现(c++)
#include<stdio.h>
#include<vector>
#include<queue>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX_NODE 105 struct Edge{
int vertex;
int dist;
Edge(int v, int d) :
vertex(v), dist(d){};
};
vector<vector<Edge> > gGraph;
struct Compare{
bool operator()(const Edge& e1, const Edge& e2){
return e1.dist > e2.dist;
}
}; bool gVisited[MAX_NODE]; int Prim(int n){ //prim算法加堆优化
memset(gVisited, false, sizeof(gVisited));
//随便选择一个起点,假设从0开始
Edge e(0, 0);
int sum_mst = 0;
priority_queue<Edge, vector<Edge>, Compare> pq;
pq.push(e);
while (!pq.empty()){
e = pq.top();
pq.pop();
if (gVisited[e.vertex])
continue;
gVisited[e.vertex] = true;
sum_mst += e.dist;
for (int i = 0; i < gGraph[e.vertex].size(); i++){ //将该点连接边都加入到优先队列中,进行下一轮选择
pq.push(gGraph[e.vertex][i]);
}
}
return sum_mst;
} int main(){
int n, dist;
while (scanf("%d", &n) != EOF){
gGraph.clear();
gGraph.resize(n);
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
scanf("%d", &dist);
gGraph[i].push_back(Edge(j, dist));
}
}
int result = Prim(n);
printf("%d\n", result);
}
return 0;
}
poj_1258 prim最小生成树的更多相关文章
- Prim 最小生成树算法
Prim 算法是一种解决最小生成树问题(Minimum Spanning Tree)的算法.和 Kruskal 算法类似,Prim 算法的设计也是基于贪心算法(Greedy algorithm). P ...
- dijkstra(最短路)和Prim(最小生成树)下的堆优化
dijkstra(最短路)和Prim(最小生成树)下的堆优化 最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于 ...
- 【POJ 2485】Highways(Prim最小生成树)
题目 Prim算法:任选一个点,加入集合,找出和它最近的点,加入集合,然后用加入集合的点去更新其它点的最近距离......这题求最小生成树最大的边,于是每次更新一下最大边. #include < ...
- POJ 2485 Highways (prim最小生成树)
对于终于生成的最小生成树中最长边所连接的两点来说 不存在更短的边使得该两点以不论什么方式联通 对于本题来说 最小生成树中的最长边的边长就是使整个图联通的最长边的边长 由此可知仅仅要对给出城市所抽象出的 ...
- Prim最小生成树板子
普里姆算法可以称为"加点法",每次迭代选择代价最小的边对应的点,加入到最小生成树中.算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点. 邻接矩阵存图 时间复杂度O(n^2 ...
- prim最小生成树
prim和DIjkstra相似,都使用了贪心策略,加一些限制条件. prim每次会找出尽量小的那个边,将其加入到树中,最终使得生成树长大. 树中有n-1个节点时或者剩下的所有边都是INF,算法结束. ...
- HDU4081 Qin Shi Huang's National Road System【prim最小生成树+枚举】
先求出最小生成树,然后枚举树上的边,对于每条边"分别"找出这条割边形成的两个块中点权最大的两个 1.因为结果是A/B.A的变化会引起B的变化,两个制约.无法直接贪心出最大的A/B. ...
- Poj 2421 Constructing Roads(Prim 最小生成树)
题意:有几个村庄,要修最短的路,使得这几个村庄连通.但是现在已经有了几条路,求在已有路径上还要修至少多长的路. 分析:用Prim求最小生成树,将已有路径的长度置为0,由于0是最小的长度,所以一定会被P ...
- Poj(2421),Prim最小生成树
题目链接:http://poj.org/problem?id=2421 最小生成树的变形,有的村庄已经连接了,就直接把他们的权值赋为0,一样的做最小生成树,Prim算法. #include <s ...
随机推荐
- jQuery开发插件的两种方式
最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验 ...
- Uva 10815-Andy's First Dictionary(串)
Problem B: Andy's First Dictionary Time limit: 3 seconds Andy, 8, has a dream - he wants to produce ...
- Cocos2d-x EditBox 设置字号大小无论用问题
1.有几次设置EditBox的字体大小无论用,于是跟进了Cocos2d-x 底层代码,看了下 原来是没设置字体的原因 以下是Editbox的setFontSize方法: void CCEditBox: ...
- android:hint属性对TextView的影响
近期看到同事写的一段代码,非常easy吧就是: <LinearLayout android:layout_width="wrap_content" android:layou ...
- html学习一(html简史及doctype)
html3部分 doctype(html) dtd head body 一.深入浅出HTML与XHTML的区别 HTML(HyperText Markup Language,超文本标记语言)最早的HT ...
- js 获取中文的拼音首字母
es6 + 模块化封装 "use strict"; module.exports = { //参数,中文字符串 //返回值:拼音首字母串数组 makePy (str) { if ( ...
- django Proxy models ---- 代理模式
一个proxy models 不会在数据库中创建新的表.而是与它的基类共用同一个表 1.model 的定义: from django.db import models # Create your mo ...
- Web Socket rfc6455 握手 (C++)
std::string data((const char*)buf->data(),bytes_transferred); recycle_buffer(buf); std::string ke ...
- php的ord函数——解决中文字符截断问题
php的ord函数——解决中文字符截断问题 分类: PHP2014-11-26 12:11 1033人阅读 评论(0) 收藏 举报 utf8字符截取 函数是这样定义的: int ord ( strin ...
- jQuery元素操作1
元素操作 1.2.1 高度和宽度 $(“div”).height(); // 高度 $(“div”).width(); // 宽度 .height()方法和.css(“height”)的区别: 1. ...