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
感悟:有的时候看书不是最好的选择。自己看算法书,一个算法看半天,还不一定能实现或者实现的特别复杂。而看视频的话很容易理解,省了很多时间。
***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的农场(最小生成树)相关推荐
- 【搜索与回溯算法】保卫农场(DFS)
[搜索与回溯算法]保卫农场 (Standard IO) 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 题目描述: 农夫John的农场里有很多小山丘,他想要在那里布置一些保镖 ...
- 守护农场Guarding the Farm
题意翻译 农夫John的农场里有很多小山丘,他想要在那里布置一些保镖去保卫他的那些相当值钱的奶牛们. 他想知道如果在一座小山丘上布置一名保镖的话,他最少总共需要招聘多少名保镖.他现在手头有一个用数字矩 ...
- 洛谷 P1550 浇水
洛谷 1550 浇水 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to his N (1 <= N <= ...
- 洛谷P1550 打井
题目背景:考完试回来发现了一道原题QAQ 题目背景 John的农场缺水了!!! 题目描述 农民John 决定将水引入到他的n(1<=n<=300)个牧场.他准备通过挖若 干井,并在各块田中 ...
- 洛谷P1550 [USACO08OCT]打井Watering Hole
P1550 [USACO08OCT]打井Watering Hole 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to ...
- usaco Cow Tours 牛的旅行
Cow Tours 牛的旅行 农民 John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场. 但是就目前而言,你能看到至少有两个牧区不连通.这样,农民 John 就有 ...
- 【图论专题】Floyd算法及其扩展应用
Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...
- p1522 牛的旅行 Cow Tours
传送门 题目 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有 ...
- TYVJ P1069 cowtour 看不懂题意
描述 农民John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,农民John就有多个牧场了. Joh ...
最新文章
- Python中fnmatch模块的使用
- cogs 610. 数对的个数
- Spring基于注解的AOP配置
- 服务器显示AL024是什么意思,中牟县家具木工机械维修台达驱动器al024故障分分钟修复...
- 复利计算再升级——连接数据库
- viewport属性允许网页宽度自动调整
- linux的tcpdump命令详解,tcpdump命令
- gpio mysql_GPIO控制LED
- QTP软件测试工具学习
- RubyonRails on linux配置
- 记账APP华而不实?Excel门槛太高?不如用它在线记账!
- 记一个用PyPDF2裁剪pdf文件并用latex插入后出现大量空白的问题
- 双引号后面要加句号吗_省略号后面可以加句号吗
- mybatis 小于号转义
- c语言扩展编译器,TKStudio内置51编译器SDCC对C语言的扩展(2)
- 李白打酒递归java_李白打酒----递归理解
- CTF题库NSCTF crypto50
- 豆瓣电影评分(微信小程序)——Day1
- 大数据_——利用hive仓库模拟数据进行日活、日新、留存数据的分析统计(详细代码步骤)
- 刚安装完成的Jmeter5打开之后没有工作台