题意:给全村建光纤,求花费最小

思路:最小生成树,树相对于图来说就是没有环

  1. m用来存图 v判断是否访问 low用来存两点间的最短距离
  2. 给low赋值  for(i=1;i<=n;i++){if(i!=pos)  low[i]=m[pos][i]  else low[i]=0;}
  3. 找最小值 即找顶点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;
  4. 更新权值 
     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 建光迁问题 最小生成树的更多相关文章

  1. 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 ...

  2. 最小生成树 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 // 顶点的最大个数 ( ...

  3. POJ 3026 Borg Maze【BFS+最小生成树】

    链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  4. POJ 1258 Agri-Net|| POJ 2485 Highways MST

    POJ 1258 Agri-Net http://poj.org/problem?id=1258 水题. 题目就是让你求MST,连矩阵都给你了. prim版 #include<cstdio> ...

  5. POJ 1258 + POJ 1287 【最小生成树裸题/矩阵建图】

    Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet c ...

  6. poj - 1258 Agri-Net (最小生成树)

    http://poj.org/problem?id=1258 FJ为了竞选市长,承诺为这个地区的所有农场联网,为了减少花费,希望所需光纤越少越好,给定每两个农场的花费,求出最小花费. 最小生成树. # ...

  7. (最小生成树)Agri-Net -- POJ -- 1258

    链接: http://poj.org/problem?id=1258 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...

  8. poj 1258 最小生成树 模板

    POJ 最小生成树模板 Kruskal算法 #include<iostream> #include<algorithm> #include<stdio.h> #in ...

  9. POJ 1258 最小生成树

    23333333333 完全是道水题.因为是偶自己读懂自己做出来的..T_T.prim的模板题水过. DESCRIPTION:John竞选的时候许诺会给村子连网.现在给你任意两个村子之间的距离.让你求 ...

随机推荐

  1. SpringBoot | 第三十七章:集成Jasypt实现配置项加密

    前言 近期在进行项目安全方面评审时,质量管理部门有提出需要对配置文件中的敏高文件进行加密处理,避免了信息泄露问题.想想前段时间某公司上传github时,把相应的生产数据库明文密码也一并上传了,导致了相 ...

  2. Oracle使用jdbc调用带游标参数的存储过程

    package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...

  3. JavaFX上手--第1天

    1.第一个JavaFX Application JavaFX 使用Java来制作可视化图形,可以做动画和3D效果,JavaFX从JDK中直接使用. package application; impor ...

  4. C#获得字符串首字符字母(大写)

    /// <summary> /// 获得字符串首字符字母(大写): /// </summary> /// <param name="cnChar"&g ...

  5. Second Highest Salary

    Write a SQL query to get the second highest salary from the Employee table. +----+--------+ | Id | S ...

  6. Educational Codeforces Round 51 (Rated for Div. 2)

    做了四个题.. A. Vasya And Password 直接特判即可,,为啥泥萌都说难写,,,, 这个子串实际上是忽悠人的,因为每次改一个字符就可以 我靠我居然被hack了???? %……& ...

  7. EF和linq语句查询条件不等于某个参数出现的问题

    where t.a!=字符串   这是错误的写法,正确为 where t.a!=字符串.trim() 其他类型变量需要保持实体类型和查询条件参数的类型是一致的,不然出现的语句可能会是 类似`Exten ...

  8. EF写统计

    EF的特性是,你from的第一个表为主表,接下来的所有表以左联或者内联或者交叉连接的方式去显示,不会出现右联, 在编写的时候,可以先确定个数据源,然后对这个数据源进行数据的统计, 例如SQL: -- ...

  9. World Wind Java开发之三 显示状态栏信息(转)

    http://blog.csdn.net/giser_whu/article/details/40920315 先来看下本篇博客索要达到的效果: 找到源码下的gov.nasa.worldwind.ut ...

  10. 动态规划专题(一)——状压DP

    前言 最近,决定好好恶补一下我最不擅长的\(DP\). 动态规划的种类还是很多的,我就从 状压\(DP\) 开始讲起吧. 简介 状压\(DP\)应该是一个比较玄学的东西. 由于它的时间复杂度是指数级的 ...