HDOJ 1863 畅通工程——普利姆算法
来源:互联网 发布:黑道圣徒3御姐捏脸数据 编辑:程序博客网 时间:2024/04/29 03:27
普利姆算法是以一个点为源点,找该源点到下一个点的最短距离
#include<stdio.h>#include<string.h>#define inf 99999using namespace std;int mp[110][110];int dis[110];bool vis[110];//普利姆算法void prim(int m){ int i,j; int sum=0; memset(vis,0,sizeof(vis));//标记数组清零 for(i=1;i<=m;i++) { dis[i]=mp[1][i];//对dis数组初始化 } vis[1]=1; for(i=1;i<m;i++)//m-1次循环,循环遍历完所有的点 { int k=0,mini=inf; for(j=1;j<=m;j++) { if(!vis[j]&&dis[j]<mini) { mini=dis[k=j]; } }//循环一遍,找到权值最小的边,并记录下所连的点 sum+=mini; vis[k]=1; for(j=1;j<=m;j++) { if(!vis[j]&&dis[j]>mp[k][j]) dis[j]=mp[k][j]; }//以k点为源点,用k点到各点的距离更新dis数组 } int flag=0; for(i=1;i<=m;i++) { if(!vis[i]) { flag=1; break; } }//若有没被标记的点,则不能畅通 if(!flag) printf("%d\n",sum); else printf("?\n");}int main(){ int n,m,i,j; while(~scanf("%d%d",&n,&m)) { if(n==0) break; for(i=0;i<=m;i++) { for(j=0;j<=m;j++) { if(i==j) mp[i][j]=0; else mp[i][j]=inf; } }//mp数组初始化,开始为散落的、无关联的点。 //除自身到自身距离为0外,其余都为无穷。 int a,b,c; for(i=1;i<=n;i++) { scanf("%d%d%d",&a,&b,&c); if(mp[a][b]>c)//两点间的距离可能有多个,取最小值 { mp[a][b]=c; mp[b][a]=c;//无向图 } } prim(m); } return 0;}
0 0
- HDOJ 1863 畅通工程——普利姆算法
- HDOJ 1863 畅通工程——克鲁斯卡尔算法
- HDOJ 1863 畅通工程
- HDOJ 1863 畅通工程
- HDOJ 1863 畅通工程
- HDOJ 1863畅通工程
- hdoj 1863 畅通工程
- hdoj 1863 畅通工程
- HDOJ--1863--畅通工程
- hdoj 1863 畅通工程
- hdoj 1863 畅通工程
- HDOJ-1863-畅通工程
- HDOJ 1863 畅通工程
- hdoj 1863 畅通工程
- HDOJ -- 1863畅通工程
- hdoj-1863畅通工程
- 最小生成树 普利姆算法 HDOJ 1879 继续畅通工程
- HDOJ 1863:畅通工程 Prim算法求解最小生成树
- Java实现在线预览office
- 2014华为机试,迷宫矩阵寻找单词的存在与否
- Flex 右键 功能
- SSH整合
- ehcache memcache redis 三大缓存男高音
- HDOJ 1863 畅通工程——普利姆算法
- 苹果Mac mini装win 7系统
- C++ STL中哈希表 hash_map介绍
- Struts2+Spring3+Mybatis3开发环境搭建
- POJ_2987_Firing(最大权闭合图)
- Codeforces Beta Round #6 (Div. 2 Only) D. Lizards and Basements 2
- 单条sql分析诊断思路
- C语言的三种整型数据类型:int、short int和long int
- 针对项目中同步队列死锁的解决方案