poj-1287 Networking(Prim)
题目链接:http://poj.org/problem?id=1287
题目描述:
请先参考关于prim算法求最小生成树的讲解博客:https://www.cnblogs.com/LJHAHA/p/10051069.html
代码实现:
- #include<iostream>
- #include<cstdio>
- using namespace std;
- #define MAX 100
- #define MAXCOST 0x7fffffff
- int graph[MAX][MAX];
- int prim(int graph[][MAX], int n)
- {
- int lowcost[MAX];//lowcost[i]:表示以i为终点的边的最小权值,注意i的起点并不确定
- int mst[MAX];//mst[i]:表示对应lowcost[i]的起点
- int i, j, min, minid, sum = ;
- //我们设V1是起点,进行初始化
- for (i = ; i <= n; i++)
- {
- lowcost[i] = graph[][i];//如果该顶点未与V1相连,lowcost值为MAXCOST
- mst[i] = ;//刚开始的时候,对于每一个Vi来说,它的起点都是V1
- }
- mst[] = ;//当mst[i]=0表示起点i加入MST
- for (i = ; i <= n; i++)//执行n-1次,保证V1到达每个顶点的最短边都能够找到
- {
- min = MAXCOST;
- minid = ;//起点Vi到顶点minid的边最短
- for (j = ; j <= n; j++)//找出最短的边,用minid记录下该顶点,用min存下最短边
- {
- if (lowcost[j] < min && lowcost[j] != )
- {
- min = lowcost[j];
- minid = j;
- }
- }
- sum += min;//每找出一条最短边就加到权值中去
- lowcost[minid] = ;//当lowcost[i]=0说明以i为终点的边的最小权值=0,也就是表示i点加入了MST
- for (j = ; j <= n; j++)
- {
- if (graph[minid][j] < lowcost[j])
- {
- lowcost[j] = graph[minid][j];
- mst[j] = minid;
- }
- }
- }
- return sum;
- }
- int main()
- {
- int i, j, k, m, n;
- int x, y, cost;
- while(scanf("%d%d",&m,&n)){
- if(m==)
- break;
- //初始化图G
- for (i = ; i <= m; i++)
- {
- for (j = ; j <= m; j++)
- {
- graph[i][j] = MAXCOST;
- }
- }
- //构建图G
- for (k = ; k <= n; k++)
- {
- cin >> i >> j >> cost;
- if(cost<graph[i][j]){
- graph[i][j] = cost;
- graph[j][i] = cost;
- }
- }
- //求解最小生成树
- cost = prim(graph, m);
- //输出最小权值和
- cout <<cost << endl;
- }
- return ;
- }
poj-1287 Networking(Prim)的更多相关文章
- POJ 1287 Networking (最小生成树)
Networking 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/B Description You are assigned ...
- POJ 1287 Networking(最小生成树)
题意 给你n个点 m条边 求最小生成树的权 这是最裸的最小生成树了 #include<cstdio> #include<cstring> #include<algor ...
- POJ 1287 Networking(最小生成树裸题有重边)
Description You are assigned to design network connections between certain points in a wide area. Yo ...
- POJ 1258 Agri-Net(Prim)
( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cmath> #include<algori ...
- POJ - 1287 Networking (最小生成树&并查集
You are assigned to design network connections between certain points in a wide area. You are given ...
- POJ.1287 Networking (Prim)
POJ.1287 Networking (Prim) 题意分析 可能有重边,注意选择最小的边. 编号依旧从1开始. 直接跑prim即可. 代码总览 #include <cstdio> #i ...
- POJ 2431 Expedition(探险)
POJ 2431 Expedition(探险) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] A group of co ...
- ZOJ1372 POJ 1287 Networking 网络设计 Kruskal算法
题目链接:problemCode=1372">ZOJ1372 POJ 1287 Networking 网络设计 Networking Time Limit: 2 Seconds ...
- c/c++ 用普利姆(prim)算法构造最小生成树
c/c++ 用普利姆(prim)算法构造最小生成树 最小生成树(Minimum Cost Spanning Tree)的概念: 假设要在n个城市之间建立公路,则连通n个城市只需要n-1条线路.这时 ...
随机推荐
- 清北学堂 清北-Day1-R1-Count
题目描述 问有几个无序二元组 (x; y) 满足 xy ≡ 1 (mod P ); 0 ≤ x < P; 0 ≤ y <P.无序二元组是指,如果 P = 10, (3; 7) 和 (7; ...
- jmeter测试mysql遇到的问题
1. 1.防火墙未关 错误: Communications link failure The last packet sent successfully to the server was 0 mil ...
- 用sqlplus为oracle创建用户和表空间
用Oracle自带的企业管理器或PL/SQL图形化的方法创建表空间和用户以及分配权限是相对比较简单的, 本文要介绍的是另一种方法就是使用Oracle所带的命令行工具SQLPLUS来创建表空间. 打开S ...
- Java_解惑
书名 ================================================================================================= ...
- PHP 命名空间与自动加载机制
include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 requ ...
- Redis事务概念
redis事务与监控 Author:SimpleWu GitHub-redis 在redis中它的事务与批处理非常相似 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是 ...
- Python基础之关于表达式
初识表达式: 优雅.清晰和务实是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新 的列表时可以使用列表解析(List comprehensions)和生成表达式 ...
- html 基本指令
命令: <pre> </pre> 格式化输出 <ol></ol> 有序 HTML 列表:示例: <pre> here is outout & ...
- cf1108E2 线段树类似扫描线
/* 有点像扫描线 思路:从左到右枚举每个点,枚举到点i时,把所有以i为起点的区间的影响删去 再加上以i-1为结尾的区间的影响 */ #include<bits/stdc++.h> usi ...
- uva11865 二分流量+最小生成树
uva好题真多 本题用二分法找flow,把流量小于flow的全部筛掉,剩下的边建立最小树形图,如果权值大于c或者不能建图,那么修改二分边界 上代码,觉得最小树形图的代码很优美 /* 题意:给定n个点, ...