最优布线问题
来源:互联网 发布:qq空间推广软件 编辑:程序博客网 时间:2024/05/21 11:14
最优布线问题
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们中间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。
当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。
现在由你负责连接这些计算机,你的任务是使任意两台计算机都连通(不管是直接的或间接的)。
当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。
现在由你负责连接这些计算机,你的任务是使任意两台计算机都连通(不管是直接的或间接的)。
输入
第1行为整数n(2<=n<=100),表示计算机的数目。此后的n行,每行n个整数。第x+1行y列的整数表示直接连接第x台计算机和第y台计算机的费用。
输出
输出只有一个整数,表示最小的连接费用。
示例输入
30 1 21 0 12 1 0
示例输出
2
提示
输出2:表示连接1和2,2和3,费用为2。
来源
示例程序
#include<stdio.h> int map[101][101],res = 0,dis[101],n; int vis[101]; int main() { int i,j,tmp; scanf("%d",&n); for(i = 1; i <= n; ++ i) for(j = 1; j <= n; ++ j) scanf("%d",&map[i][j]); for(i = 2; i <= n; ++ i) dis[i] = map[1][i]; vis[1] = 1; for(i = 1; i < n; ++ i) { int min = 999999999; for(j = 1; j <= n; ++ j) { if(!vis[j] && dis[j] < min) { min = dis[j]; tmp = j; } } res += min; vis[tmp] = 1; for(j = 1; j <= n; ++ j) { if(!vis[j] && map[tmp][j] < dis[j]) dis[j] = map[tmp][j]; } } printf("%d\n",res); return 0; }
0 0
- 最优布线问题
- 最优布线问题
- 最优布线问题
- 最优布线问题
- wikioi1231 最优布线问题
- 最优布线问题
- (ssl1612)最优布线问题
- 最优布线问题
- 最优布线问题
- 1231 最优布线问题
- WikiOI 1231 最优布线问题
- wikioi p1231 最优布线问题
- wikioi 1231 最优布线问题
- wikioi 1231 最优布线问题
- 最优布线问题 解题报告
- 1231 最优布线问题 -- kruskal
- 【codevs 1231】 最优布线问题
- 【9004】&&【7010】最优布线问题
- ServletContextListener使用详解
- 最短路径问题
- 微信学习系列之一:定时获取微信access_token的线程
- Java学习笔记(集合_1)
- C#基础篇一
- 最优布线问题
- AngularJs ToolTips实现
- J2EE入门—浅谈J2EE的十三个规范
- n皇后问题
- Hive ORC文件格式存储与测试(Malformed ORC file解决)
- 抽象类与接口的区别
- qt5 解析Json文件
- USART---串口发送数据
- unity--ugui中文教程翻译2