HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树
还是畅通工程
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 20712 Accepted Submission(s): 9213
Hint
Huge input, scanf is recommended.
#include<stdio.h>
#include<string.h>
#define max 100000000
int map[][],sum,min;// map[i][j] 记录从点 i 到点 j 的距离 !
int main()
{
int n,m,i,x,y,dis,j,flag,visit[];
while(~scanf("%d",&n)&&n!=)
{ m=(n*(n-))/;
memset(map, , sizeof(map));//数组清零
memset(visit,,sizeof(visit));
for(i=;i<m;i++)
{
scanf("%d%d%d",&x,&y,&dis);
map[x-][y-]=map[y-][x-]=dis;
}
for(i=;i<n;i++)
map[i][i]=max;//建图完成 !
visit[]=; sum=;
for ( i=; i<n; i++)//prim 算法求最小生成树
{
min= ;
for ( j=; j<n; j++)
{
if (!visit[j] && map[][j] < min)
{
min = map[][j];
flag = j;
}
}
sum += min;
visit[flag] = ;
for ( j=; j<n; j++)
{
if (!visit[j] && map[][j] > map[flag][j])
{
map[][j] = map[flag][j];
}
}
}
printf("%d\n",sum);
}
return ;
}
prim写成函数的方式,更容易理解。
#include<stdio.h>
int map[][],visit[];
int length[];
int getmin(int n)
{
int i,min;
for(i=;i<=n;i++)
{
if(visit[i]==)
{
min=i;
break;
}
}
for(i++;i<=n;i++)
{
if(visit[i]==&&length[min]>length[i])
min=i;
}
return min;
}
int prim(int n)
{
int i,j;
int min;
int sum;
for(i=;i<=n;i++)
{
visit[i]=;
length[i]=map[][i];
}
visit[]=;
sum=;
for(i=;i<=n;i++)
{
min=getmin(n);
visit[min]=;
sum+=length[min];
for(j=;j<=n;j++)
{
if(visit[j]==)
{
if(map[min][j]<length[j])
{
length[j]=map[min][j];
}
}
}
}
return sum;
}
int main()
{
int n, m;
int i;
int min;
int u, v, cost;
while (scanf("%d", &n) != EOF && n != )
{
m = n * (n - ) / ;
for (i = ; i <= n; i++)
map[i][i] = ;
for (i = ; i < m; i++)
{
scanf("%d%d%d", &u, &v, &cost);
map[u][v] = cost;
map[v][u] = cost; }
min = prim(n);
printf("%d\n", min);
}
return ;
}
浓缩版:
#include<stdio.h>
#include<string.h>
#define MAX 100000
int map[][],v[];
int prim(int n)//最好的prim的模板。
{
int k[],i,j;
int min,sum=,flag,count=;
memset(k,,sizeof(k));
memset(v,,sizeof(v));
for(i=;i<=n;i++)
k[i]=map[][i];
for(i=;i<=n;i++)
{
min=MAX;
for(j=;j<=n;j++)
{
if(min>k[j]&&v[j]==)
{
min=k[j];
flag=j;
}
}
sum+=min;
v[flag]=;
for(j=;j<=n;j++)
if(v[j]==&&k[j]>map[flag][j]&&flag!=j)
k[j]=map[flag][j];
}
return sum;
}
int main()
{
int n,m,i,j,p,q,r,min;
while(~scanf("%d",&n)&&n!=)
{
m=n*(n-)/;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
if(i==j) map[i][j]=;
else
map[i][j]=MAX;
}
for(i=;i<m;i++)
{
scanf("%d%d%d",&p,&q,&r);
map[p][q]=map[q][p]=r;
}
min=prim(n);
printf("%d\n",min);
}
return ;
}
HDU-1233 还是畅通工程 (prim 算法求最小生成树)的更多相关文章
- hdu 1233 还是畅通工程 (prim, kruskal)
还是畅通工程Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1233 还是畅通project(kruskal求最小生成树)
还是畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- HDU.1233 还是畅通工程(Prim)
HDU.1233 还是畅通工程(Prim) 题意分析 首先给出n,代表村庄的个数 然后出n*(n-1)/2个信息,每个信息包括村庄的起点,终点,距离, 要求求出最小生成树的权值之和. 注意村庄的编号从 ...
- Kruskal和Prim算法求最小生成树
Kruskal算法求最小生成树 测试数据: 5 6 0 1 5 0 2 3 1 2 4 2 4 2 2 3 1 1 4 1 输出: 2 3 1 1 4 1 2 4 2 0 2 3 思路:在保证不产生回 ...
- HDU 1233 还是畅通工程(Kruskal算法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1233 还是畅通工程 (最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)
还是畅通工程 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- File的文件提取的小练习
package com.java.Dmeo1.www; import java.io.File;import java.util.LinkedList;import java.util.TreeSet ...
- 虚拟机中如何Linux系统如何访问PC硬盘中的文件(如何将windows下的文件夹挂载到linux虚拟机下)
这段时间决定学习嵌入式,变打算安装个Linux系统先熟悉一下Linux系统的使用,但自己电脑上安装的win7系统又不想装双系统,一是闲麻烦,二是由于对Linux系统不熟悉担心会因为自己的误操作而损坏系 ...
- NPOI_2.1.3-Excel中设置小数、百分比、货币、日期、科学计数法和金额大写
在操作Excel时候一些特殊值的转换是在所难免的,下面就给出转换方法大同小异,代码如下: HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); ISheet ...
- 虚拟机环境Centos如何上网
虚拟机环境Centos如何上网----------by ruffianfish.痞子鱼 因为我是用的虚拟机的环境,所以一切操作角度从虚拟机出发. 虚拟机环境的优点: 适合新手学习linux 永远不要怕 ...
- HTTP协议-标签简介
这个系列的文章要讨论的是如何通过ASP.net服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展.我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这 ...
- 解决php的$美元符号与Zen Coding冲突问题
Zen Coding插件就不介绍了. 众所周知,安装了插件以后,输入$符号会被自动解析为相应的数字1.2.3... 作为一名PHP程序员,想要通过其定义一些自己常用的代码.却发现展开以后悲剧的发现$符 ...
- JavaScript模块化开发实例
最近接触了一些JavaScript开发的例子,在这里与大家一起分享一下: 例子:当我们一个团队在写Js文件的时候,你一个人写的JS代码自己可以看懂也可以维护,但是别人想对你的JS进行扩展的话,如果都在 ...
- WebForm中TreeView的使用
protected void Page_Load(object sender, EventArgs e) { DatabaseBind(); ...
- Marsonry
前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...
- WordPress 前端投稿/编辑插件 DJD Site Post(支持游客和已注册用户)
转自:http://www.wpdaxue.com/front-end-publishing.html 说到前端用户投稿,倡萌之前推荐过3个不错的插件: WordPress匿名投稿插件:DX-Cont ...