poj 1258 建光迁问题 最小生成树
题意:给全村建光纤,求花费最小
思路:最小生成树,树相对于图来说就是没有环
- m用来存图 v判断是否访问 low用来存两点间的最短距离
- 给low赋值 for(i=1;i<=n;i++){if(i!=pos) low[i]=m[pos][i] else low[i]=0;}
- 找最小值 即找顶点i的最小距离 for(int j=1;j<n;j++) for(int i=1;i<=n;i++) if(v[i]==0&&min>l[i]) min=l[i] pos=i;
- 更新权值 
for(j = 1; j <= n; j++) //更新权值 
 if(visited[j]==0 && low[j]>m[pos][j])
 low[j] = m[pos][j];
解决问题的代码:
#include <stdio.h>
#include <string.h>
#define INF 0x3f3f3f3f
#define MAXN 517
//创建m二维数组储存图表,low数组记录每2个点间最小权值,visited数组标记某点是否已访问
int m[MAXN][MAXN], low[MAXN], visited[MAXN];
int n;
int prim( )
{
int i, j;
int pos, minn, result=;
memset(visited,,sizeof(visited));
visited[] = ;
pos = ; //从某点开始,分别标记和记录该点
for(i = ; i <= n; i++) //第一次给low数组赋值
if(i != pos)
low[i] = m[pos][i];
else
low[i] = ;
for(i = ; i < n; i++) //再运行n-1次
{
minn = INF; //找出最小权值并记录位置
for(j=; j<=n; j++)
{
if(visited[j]== && minn>low[j])
{
minn = low[j];
pos = j;
}
}
result += minn; //最小权值累加
visited[pos] = ; //标记该点
for(j = ; j <= n; j++) //更新权值
if(visited[j]== && low[j]>m[pos][j])
low[j] = m[pos][j];
}
return result;
}
int main()
{
int i,j,ans;
while(scanf("%d",&n)!=EOF)
{
memset(m,INF,sizeof(m)); //所有权值初始化为最大
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
{
scanf("%d",&m[i][j]);
}
ans=prim( );
printf("%d\n",ans);
}
return ;
}
poj 1258 建光迁问题 最小生成树的更多相关文章
- poj 1251 poj 1258 hdu 1863 poj 1287  poj 2421 hdu 1233 最小生成树模板题
		poj 1251 && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ... 
- 最小生成树   10.1.5.253   1505         poj  1258       http://poj.org/problem?id=1258
		#include <iostream>// poj 1258 10.1.5.253 1505 using namespace std; #define N 105 // 顶点的最大个数 ( ... 
- POJ 3026 Borg Maze【BFS+最小生成树】
		链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ... 
- POJ 1258 Agri-Net|| POJ 2485 Highways MST
		POJ 1258 Agri-Net http://poj.org/problem?id=1258 水题. 题目就是让你求MST,连矩阵都给你了. prim版 #include<cstdio> ... 
- POJ 1258 + POJ 1287 【最小生成树裸题/矩阵建图】
		Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet c ... 
- poj - 1258 Agri-Net (最小生成树)
		http://poj.org/problem?id=1258 FJ为了竞选市长,承诺为这个地区的所有农场联网,为了减少花费,希望所需光纤越少越好,给定每两个农场的花费,求出最小花费. 最小生成树. # ... 
- (最小生成树)Agri-Net -- POJ -- 1258
		链接: http://poj.org/problem?id=1258 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ... 
- poj 1258  最小生成树 模板
		POJ 最小生成树模板 Kruskal算法 #include<iostream> #include<algorithm> #include<stdio.h> #in ... 
- POJ 1258 最小生成树
		23333333333 完全是道水题.因为是偶自己读懂自己做出来的..T_T.prim的模板题水过. DESCRIPTION:John竞选的时候许诺会给村子连网.现在给你任意两个村子之间的距离.让你求 ... 
随机推荐
- 网页mp3不能获取,报404问题解决
			js有些时候有些报错就是很莫名其妙 一 代码没错,js,html一点红都没有 然后上正式的时候,mp3不能播放音乐,报404 二 出这个错误,我第一反应是正式的配置有问题,毕竟开发测试都可以是不是? ... 
- 排序算法对比,步骤,改进,java代码实现
			前言 发现是时候总结一番算法,基本类型的增删改查的性能对比,集合的串并性能的特性,死记太傻了,所以还是写在代码里,NO BB,SHOW ME THE CODE! github地址:https://gi ... 
- xenserver 更新源
			在xenserver上安装vnc软件时,报错 [root@cloud yum-3.4.3]# ./yummain.py install yumThere are no enabled repos.Ru ... 
- 关于WebStorm,PhpStorm新版本输入中文问题
			此文意在记录webstorm,PhpStorm输入中文无提示的问题,对于百忙中的开发无需浏览下面那一段套路话,直接浏览原文链接或者本博客绿色文字解决问题即可. 对于使用过dw,sublime,brac ... 
- 从零开始的全栈工程师——js篇2.3
			自加和自减 =赋值运算 他的顺序是从右往左 从后往前 var a=12; 声明一个变量并将12赋值给aa=a+2; 将a+2赋值给a简写a+=3; a=a+3a+=1; a++ 在自己原有的基础上加1 ... 
- OpenCV之cvAddWeighted直接C语言实现版addWeighted,应对上下平滑融合拼接
			关于OpenCV中的cvAddWeighted的介绍可参见<opencv中的cvAddWeighted函数> cvAddWeighted有个问题,它只能实现两张图片的直接融合,往往产生明显 ... 
- c++ STL map容器成员函数
			map容器用于查找,设置键值和元素值,输入键值,就能得到元素值.map对象中的元素时刻都是有序的,除非无序插入的.它是用平衡树创建的.查找很快. 函数 描述,注意有r的地方都是不能用it代替的. ma ... 
- yii:高级应用程序搭建数据库的详细流程
			上一章已经把高级应用程序的环境搭配成功,那么下一步就是搭建数据库了. 首先,我们先去创建一个数据库,比如:demo 创建完之后,我们重要的就是将文件中的数据进行一个更新,在www/advancend/ ... 
- c++指针二维数组
			; int** G; //初始化 G = new int*[N]; ; i < N; i++) G[i] = new int[N]: //删除 ; i < N; i++) delete[] ... 
- linux 命令——27 chmod
			chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法. 一种是包含字母和操作符表达式的文字设定法: 另一种是包含数字的数字设定法. Linux系统中 ... 
