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

感悟:有的时候看书不是最好的选择。自己看算法书,一个算法看半天,还不一定能实现或者实现的特别复杂。而看视频的话很容易理解,省了很多时间。

***prime算法实现,复杂度O(n*n)
#include<stdio.h>
#define inf 0x3f3f3f3f
typedef struct NODE node;
struct NODE{int vex;//该牧场close[i]与谁相连int mincost;//相连最小的路径
};
node close[25];//下标就是牧场序号
int findmin(int n)//找到最小的花费路径,路径为i到close[i].vex
{int tep;int min=inf;for(int i=1;i<=n;i++){if(close[i].mincost!=0){if(close[i].mincost<min){min=close[i].mincost;tep=i;}} } return tep;
}
int main(void)
{int k;scanf("%d",&k);while(k--){int n;int ans=0;int cost[22][22]={0};scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&cost[i][j]);if(cost[i][j]==0) cost[i][j]=inf;}}close[1].mincost=0;//此点用过,就是已经加入到了生成树里面//默认1为起始点for(int i=2;i<=n;i++)//初始化数组,//把所有cost数组第一行的数据复制到close数组里{close[i].vex=1;close[i].mincost=cost[1][i];}for(int i=1;i<n;i++)//执行次数{int tep=findmin(n);   //找到花费最小路径的下标ans+=close[tep].mincost;//答案加上close[tep].mincost=0;//更新为此点用过for(int i=1;i<=n;i++) //更新close数组的值,//看看有没有其他未用过的点(牧场)到tep的路径<其他未用过的点到生成树里面其他点的路径{if(close[i].mincost!=0&&cost[tep][i]<close[i].mincost){close[i].mincost=cost[tep][i];close[i].vex=tep;}}} printf("%d\n",ans);}
}

John的农场(最小生成树)相关推荐

  1. 【搜索与回溯算法】保卫农场(DFS)

    [搜索与回溯算法]保卫农场 (Standard IO) 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述: 农夫John的农场里有很多小山丘,他想要在那里布置一些保镖 ...

  2. 守护农场Guarding the Farm

    题意翻译 农夫John的农场里有很多小山丘,他想要在那里布置一些保镖去保卫他的那些相当值钱的奶牛们. 他想知道如果在一座小山丘上布置一名保镖的话,他最少总共需要招聘多少名保镖.他现在手头有一个用数字矩 ...

  3. 洛谷 P1550 浇水

    洛谷 1550 浇水 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to his N (1 <= N <= ...

  4. 洛谷P1550 打井

    题目背景:考完试回来发现了一道原题QAQ 题目背景 John的农场缺水了!!! 题目描述 农民John 决定将水引入到他的n(1<=n<=300)个牧场.他准备通过挖若 干井,并在各块田中 ...

  5. 洛谷P1550 [USACO08OCT]打井Watering Hole

    P1550 [USACO08OCT]打井Watering Hole 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to ...

  6. usaco Cow Tours 牛的旅行

    Cow Tours 牛的旅行 农民 John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场. 但是就目前而言,你能看到至少有两个牧区不连通.这样,农民 John 就有 ...

  7. 【图论专题】Floyd算法及其扩展应用

    Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...

  8. p1522 牛的旅行 Cow Tours

    传送门 题目 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有 ...

  9. TYVJ P1069 cowtour 看不懂题意

    描述 农民John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,农民John就有多个牧场了. Joh ...

最新文章

  1. Python中fnmatch模块的使用
  2. cogs 610. 数对的个数
  3. Spring基于注解的AOP配置
  4. 服务器显示AL024是什么意思,中牟县家具木工机械维修台达驱动器al024故障分分钟修复...
  5. 复利计算再升级——连接数据库
  6. viewport属性允许网页宽度自动调整
  7. linux的tcpdump命令详解,tcpdump命令
  8. gpio mysql_GPIO控制LED
  9. QTP软件测试工具学习
  10. RubyonRails on linux配置
  11. 记账APP华而不实?Excel门槛太高?不如用它在线记账!
  12. 记一个用PyPDF2裁剪pdf文件并用latex插入后出现大量空白的问题
  13. 双引号后面要加句号吗_省略号后面可以加句号吗
  14. mybatis 小于号转义
  15. c语言扩展编译器,TKStudio内置51编译器SDCC对C语言的扩展(2)
  16. 李白打酒递归java_李白打酒----递归理解
  17. CTF题库NSCTF crypto50
  18. 豆瓣电影评分(微信小程序)——Day1
  19. 大数据_——利用hive仓库模拟数据进行日活、日新、留存数据的分析统计(详细代码步骤)
  20. 刚安装完成的Jmeter5打开之后没有工作台

热门文章

  1. 第十三篇:上下文无关语法 Context-Free Grammar
  2. Visual Studio中断NPM套件库服务
  3. fiddler4 使用教程
  4. RadGrid使用技巧:从RadGrid获取绑定的值
  5. js中对arry数组的各种操作小结
  6. IT运维包括最基本的三个方面
  7. if(window.event) e = window.event
  8. Hadoop系列之一:hadoop部署安装
  9. 何谓服务器托管服务?
  10. pandas groupby