博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1258Agri-Net
阅读量:4362 次
发布时间:2019-06-07

本文共 1576 字,大约阅读时间需要 5 分钟。

题意 : john当上了镇长,打算给每个农场都连接网络,需要用最小的成本连接其他所有农场,所以要找最少的纤维连在一起,任何两个农场之间的距离不超过十万。输入n,下面有n行n列,代表着每两个农场的距离,对角线为0,因为自己到自己是为0;

解题思路 : 这个题要包含所有的农场,赤果果的最小生成树,这个题的话,注意是多组输入还有数组不要开得太小,算法的话prim和kruskal都可以,我用的是prim。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 int ans,dis[1001][1001]; 7 const int INF = 1<<29 ; 8 int vis[1001],n,low[1001]; 9 int prim()10 {11 memset(vis,0,sizeof(vis));12 int i,j,flag,min;13 ans = 0 ;14 for(i = 1 ; i <= n ; i++)15 {16 low[i] = dis[1][i];17 }18 vis[1] = 1 ;19 for(i = 1 ; i <= n ; i++)20 {21 min = INF;22 for(j = 1 ;j <= n ; j++)23 {24 if(min > low[j]&&!vis[j])25 {26 min = low[j] ;27 flag = j;28 }29 }30 if(min >= INF)31 {32 flag = -1 ;33 break ;34 }35 ans+=min ;36 vis[flag] = 1 ;37 for(j = 1 ; j <= n ; j++)38 {39 if(dis[flag][j] < low[j] && !vis[j])40 low[j] = dis[flag][j];41 }42 }43 return ans ;44 }45 int main()46 {47 while(~scanf("%d",&n))48 {49 for(int i = 1 ; i <= n ; i++)50 {51 for(int j = 1 ; j <= n ; j++)52 {53 cin>>dis[i][j] ;54 }55 }56 ans = prim();57 cout<
<
View Code

 

转载于:https://www.cnblogs.com/luyingfeng/p/3256601.html

你可能感兴趣的文章
Kerberos安装及使用
查看>>
android 布局中 layout_gravity、gravity、orientation、layout_weight
查看>>
highcharts
查看>>
【学员管理系统】0x02 学生信息管理功能
查看>>
什么是Entity Framework(ORM)
查看>>
软件质量理解
查看>>
jquery 在 table 中修改某行值
查看>>
pyc文件是什么【转载】
查看>>
POM.xml 标签详解
查看>>
hdu 3635 Dragon Balls (并查集)
查看>>
文件操作
查看>>
7.java集合,泛型简单总结,IO流
查看>>
杭电2007 平方和与立方和
查看>>
JS邮箱验证-正则验证
查看>>
Quartz 2D绘图
查看>>
JS Fetch
查看>>
EJB 笔记
查看>>
【delete】Android自定义控件(四) 自定义ImageView动态设置ImageView的高度
查看>>
HDUOJ------(1230)火星A+B
查看>>
Servlet
查看>>