John的农场
Description
John是一个农场主,他有几个牧场,为了好好照顾他的牛,他必须在几个牧场之间来回,可糟糕的天气往往使得道路非常泥泞,为此John准备在牧场之间铺一些石子路,这样在下雨天也能快速地从一个牧场到另外一个牧场。但John的资金有限,为了自己能从任一个牧场都通过石子路到达另外一个牧场,他需要好好设计一下线路。请帮助John设计好线路,使得John能从任一个牧场都通过石子路到达另外一个牧场,且线路的费用最低。
输入:
第一行是一个整数K,表示有多少个测试用例,以后每个测试用例占n+1行。每个测试用例的第一行为一个整数n(3<=n<=20),表示有多少个牧场,从第二行开始为一个n*n的矩阵,矩阵元素aij表示从i个牧场到j个牧场的铺路费用。
输出:
每行输出一个测试用例的最小铺路费用。
Sample Input
2
6
0 6 1 5 0 0
6 0 5 0 3 0
1 5 0 5 6 4
5 0 5 0 0 2
0 3 6 0 0 6
0 0 4 2 6 0
4
0 1 2 3
1 0 3 4
2 3 0 1
3 4 1 0
Sample Output
15
4
#include<iostream>
using namespace std;
#define Infinity 65535
bool flag[21];
int cost[21][21],lowcost[21],mincost;
int main()
{
int k;
cin>>k;
while(k--)
{
int n;
cin>>n;
int i,j;
mincost = 0;
memset(flag,false,sizeof(flag));
memset(lowcost,0,sizeof(lowcost));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>cost[i][j];
if(cost[0][i]!=0)
{
lowcost[i]=cost[0][i];
}
else lowcost[i]=Infinity;
}
}
flag[0]=true;
i=0;
int key;
int min;
while(i<n-1)
{
min= Infinity;
key = 0;
for(j=1;j<n;j++)
{
if(!flag[j]&&lowcost[j]!=0&&min>lowcost[j])
{
min = lowcost[j];
key = j;
}
}
flag[key] = true;
mincost+=lowcost[key];
for(j=1;j<n;j++)
{
if(!flag[j]&&cost[key][j]!=0&&cost[key][j]<lowcost[j])
lowcost[j] = cost[key][j];
}
i++;
}
cout<<mincost<<endl;
}
return 0;
}
分享到:
相关推荐
通过解决这些题目,你可以深入理解最小生成树的概念,学习如何在实际问题中应用Kruskal和Prim算法,同时还能锻炼你的算法实现和优化能力。记住,理解和实践是提高ACM竞赛能力的关键,不断挑战自己,才能在比赛中取得...
总结来说,这个C++程序通过最小堆实现了一个高效的Prim最小生成树算法,能够快速找到无向图的最小生成树,从而在大规模图数据中找到最优的边集合。在实际应用中,这种优化算法常用于网络设计、资源分配等需要最小化...
图论模板 最小生成树,Kruscal算法,采用了并查集技术,外加注释,很通俗易懂的,可以用来解决acm 畅通工程方面的问题
在ACM(国际大学生程序设计竞赛)中,最小生成树算法是常见的一种解决问题的策略。本篇文章将详细探讨最小生成树及其在ACM竞赛中的应用。 首先,最小生成树(Minimum Spanning Tree, MST)是指在一个加权无向连通图...
在这个ACM习题中,你可能需要实现Prim算法或Kruskal算法来找到最小生成树。Prim算法从一个初始节点开始,逐步添加边,每次添加的边都是当前未加入树的边中与树中节点连接且权重最小的那条。而Kruskal算法则是按边的...
### 最小生成树与最短路径算法在ACM竞赛中的应用 #### 一、引言 近年来,在各类编程竞赛如ACM竞赛中,最小生成树和最短路径算法的应用日益广泛。这些算法不仅考验参赛者的逻辑思维能力,还对算法理解和实现的速度...
杭电ACM课件2014版之 (HDUACM201403版_06)并查集(最小生成树)
### 最小生成树(MST)问题详解 #### 一、最小生成树概念 最小生成树(Minimum Spanning Tree, MST)问题是计算机科学与图论领域中的一个重要问题,尤其是在网络设计、电路板布线等领域有着广泛的应用。对于一个连通的...
HDUACM201509版_07并查集(最小生成树).ppt文件很可能包含了关于这个问题的详细讲解,包括并查集的建立、维护以及如何与Kruskal算法结合来求解最小生成树的问题。 并查集是一种用于处理连接关系的数据结构,它可以...
### ACM 最小生成树 Prim算法 #### 知识点概览 1. **Prim算法简介** 2. **并查集的使用** 3. **代码详解** 4. **Prim算法的应用场景** #### Prim算法简介 Prim算法是一种用于寻找图中所有顶点构成的最小生成树...
请输出无向连通图最小生成树权重之和。 输入 第一行是2个整数,分别表示顶点个数n和边数m。接下来的m行中,每一行第一个整数表示边的开始顶点,第二个表示边的结束顶点,第三个表示这条边的权重。 ( 测试数据中保证图...
2. **图论算法**:Dijkstra最短路径算法、Floyd-Warshall所有对最短路径、拓扑排序、Prim最小生成树、Kruskal最小生成树等。 3. **动态规划**:背包问题、最长公共子序列、最长递增子序列等,这些问题在ACM中很常见...
(HDUACM2010版_06)并查集(最小生成树(HDUACM2010版_06)并查集(最小生成树(HDUACM2010版_06)并查集(最小生成树(HDUACM2010版_06)并查集(最小生成树
《ACM ICPC程序设计与分析(C++实现)》是一本专为参与ACM国际大学生程序设计竞赛(International Collegiate Programming Contest, 简称ICPC)的参赛者及对此领域感兴趣的程序员编写的指导书籍。书中深入探讨了在...
- 图:图论是ACM竞赛中的核心部分,如最短路径(Dijkstra、Floyd)、最小生成树(Prim、Kruskal)等。 2. **排序与搜索算法** - 冒泡排序、插入排序、选择排序:基础排序算法,用于理解排序原理。 - 快速排序、...
本资源摘要信息涵盖了 ACM 中常用的算法集,包括最小生成树、Prim 算法和堆实现最短路等知识点。 最小生成树 最小生成树(Minimum Spanning Tree,MST)是连通图的极小权重子图,使得图中的所有顶点都被包含在内。...
ACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和...
- 在ACM竞赛中,红黑树常用于实现高效的数据结构,如关联数组、集合、优先队列等。 - C++ STL中的`std::set`和`std::map`就是基于红黑树实现的。 - 其他应用还包括哈希表的辅助索引、数据库索引等。 6. **C/C++...
基于C++实现的ACM-ACM竞赛常用模板文件 在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛团队需要使用编程语言解决一系列算法问题。C++作为一门强大的编程语言,因其高效、...