1001-专题四
2016-06-20 21:49
363 查看
1.题意:给出村子间的距离,以及已连接的村子,求村子联通需要修的最短路程
2.思路:路程相当于权数,离散数学的思想,我们上课讲的,prim,kruskal算法都可,思路不同,结论相同
3.感想:在这学期的数据结构中也有涉及。
2.思路:路程相当于权数,离散数学的思想,我们上课讲的,prim,kruskal算法都可,思路不同,结论相同
3.感想:在这学期的数据结构中也有涉及。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int gp[105][105]; int lowercost[105]; int used[105]; int n; int prim() { int i,j,k; int sum=0; used[1]=1; for(i=1;i<=n;i++) lowercost[i]=gp[1][i]; for(i=2;i<=n;i++) { int pos; int temp=9999999; for(j=1;j<=n;j++) { if(lowercost[j]<temp&&!used[j]) { temp=lowercost[j]; pos=j; } } used[pos]=1; sum+=lowercost[pos]; for(k=1;k<=n;k++) { if(gp[pos][k]<lowercost[k]&&!used[k]) lowercost[k]=gp[pos][k]; } } return sum; } int main() { int i,j,m,a,b; while(scanf("%d",&n)!=EOF) { memset(lowercost,0,sizeof(lowercost)); memset(used,0,sizeof(used)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&gp[i][j]); scanf("%d",&m); while(m--) { scanf("%d%d",&a,&b); gp[a][b]=gp[b][a]=0; } int ans=prim(); printf("%d\n",ans); } return 0; }
相关文章推荐
- HDOJ 2544 最短路(四种做法)
- 什么是Intent(意图)
- Poj 2226 Muddy Fields【二分匹配】
- 关于软件开发团队的一些思考
- 【c++程序】不同字符的个数统计
- javascript之DOM操作
- 55. Jump Game
- libvlc 打开较大MP4文件,关闭慢的问题.
- ubuntu samba服务器的安装和出错修改
- 把自己的开源库添加cocoapods
- jsp前台中关于c标签的一些使用(c:choose和c:forEach)
- 获取操作系统版本的几种方法
- 二维数组中的查找
- caffe基础(2):视觉层及参数
- 【剑指offer】树的子结构
- 信号(signal)介绍
- JavaSE学习56:GUI编程之事件模型(一)
- 双链播放寻址
- hdu 1521 排列组合 指数型母函数
- leetcode 203 Remove-Linked-List-Elements