oj-【基础图论】最优布线问题
来源:互联网 发布:知乎问题 提问者 编辑:程序博客网 时间:2024/04/30 20:12
题目描述
学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们中间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。 当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。
为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。 现在由你负责连接这些计算机,你的任务是使任意两台计算机都连通(不管是直接的或间接的)。
输入
第1行:1个整数n(2≤n≤100),表示计算机的数目。
此后的n行,每行n个整数。第x+1行y列的整数表示直接连接第x台计算机和第y台计算机的费用。
输出
第1行:1个整数,表示最小的连接费用
样例输入
30 1 21 0 12 1 0
样例输出
2
提示
这种题..一看就知道是用最小生成树~~
求最小生成树有两种算法~kruskal和prim.
在这道题中,如果我没搞错...应该是用的prim.
kruskal:把边从小到大排,然后一条一条选可以使两端的点不在一棵树中的边..然后合并..
prim:从一个点开始,找到与在树中的点相连的权值最小的点(?)
然后上代码..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<cstdio>
int
n,s,pnt[105],a[105][105],vs[105],as=0;
int
main()
{
int
i,j,x,q;
scanf
(
"%d"
,&n);
for
(i=1;i<=n;i++)
for
(j=1;j<=n;j++)
scanf
(
"%d"
,&a[i][j]);
pnt[++s]=vs[1]=1;
for
(;s<n;)
{
x=2147483640;
for
(i=1;i<=s;i++)
for
(j=1;j<=n;j++)
if
(x>a[pnt[i]][j]&&!vs[j])
{
x=a[pnt[i]][j];
q=j;
}
as+=x;
pnt[++s]=q;
vs[q]=1;
}
printf
(
"%d"
,as);
}
/**************************************************************
Problem: 1084
User: dogeding
Language: C++
Result: 正确
Time:4 ms
Memory:1136 kb
****************************************************************/
虽然比较耗时..但至少..AC了..
0 0
- oj-【基础图论】最优布线问题
- 最优布线问题
- 最优布线问题
- 最优布线问题
- 最优布线问题
- wikioi1231 最优布线问题
- 最优布线问题
- (ssl1612)最优布线问题
- 最优布线问题
- 最优布线问题
- 1231 最优布线问题
- WikiOI 1231 最优布线问题
- wikioi p1231 最优布线问题
- wikioi 1231 最优布线问题
- wikioi 1231 最优布线问题
- 最优布线问题 解题报告
- 1231 最优布线问题 -- kruskal
- 【codevs 1231】 最优布线问题
- MySQL的join查询和索引
- Swift 3.0一些Api变动
- 关于strcmp()返回值的细节问题
- ListView
- 杭电oj编码2030
- oj-【基础图论】最优布线问题
- LA 4725 Airport 二分 -
- 日志配置文档
- 一个数据库大概需要了解的信息
- 安装corelDraw x8过程遇到的坑
- 10步让你成为更优秀的程序员
- java怎样把string型数据转换为object型数据
- js获取时间
- poj2411 Mondriaan's Dream--状压dp