分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

POJ 1258 Agri-Net

发布时间:2023-09-06 01:17责任编辑:顾先生关键词:暂无标签

题意:给你一个n^2的邻接矩阵,表示u到v的距离,问你要让所以农场通网需要多长网线。

题解:用prim算法,从一个结点开始构造生成树,每次选当前子图和图外结点权值最小的边,把图外结点加入子图中。

prim比kruskal更适合稠密图,未优化的prim时间复杂的为O(u^2),kruskal时间复杂的为O(eloge)

 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 const int inf = 0x3f3f3f3f; 5 int cost[110][110], lowc[110], vis[110]; 6 int n; 7 ?8 int prim() 9 {10 ????memset(vis,0,sizeof(vis));11 ????int minc,res=0,p;12 ????vis[0]=1;13 ????for(int i=0;i<n;i++)14 ????????lowc[i]=cost[0][i];15 ????for(int i=1;i<n;i++)16 ????{17 ????????minc=inf;18 ????????p=-1;19 ????????for(int j=0;j<n;j++)20 ????????{21 ????????????if(vis[j]==0&&lowc[j]<minc)22 ????????????{23 ????????????????minc=lowc[j];24 ????????????????p=j;25 ????????????}26 ????????}27 ????????if(minc==inf)28 ????????????return -1;29 ????????res+=minc;30 ????????vis[p]=1;31 ????????for(int j=0;j<n;j++)32 ????????????if(vis[j]==0&&lowc[j]>cost[p][j])33 ????????????????lowc[j]=cost[p][j];34 ????}35 ????return res;36 }37 38 int main()39 {40 ????while(~scanf("%d", &n) && n)41 ????{42 ????????for(int i = 0; i < n; i++)43 ????????????for(int j = 0; j < n; j++)44 ????????????????scanf("%d", &cost[i][j]);45 ????????printf("%d\n", prim());46 ????}47 }

POJ 1258 Agri-Net

原文地址:http://www.cnblogs.com/kearon/p/7669129.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved