编写最小生成树代码遇到的小问题
来源:互联网 发布:java 项目中使用log4j 编辑:程序博客网 时间:2024/06/04 19:05
#include<stdio.h>#include<string.h>#include<malloc.h>#include<algorithm>#define max 0x3f3f3f3f如果定义成0x7FFFFFFF答案也是错的
using namespace std;int map[200][200];int mark[200];int low[200];int n,m,a,b,c,sum,i,j;/*int prim(int pos){ int min; mark[pos]=1; for(i=1;i<=n;i++) { if(i!=pos) low[i]=map[pos][i]; } for(i=1;i<=n;i++) { min=max; for(j=1;j<=n;j++) { if(low[j]<min&&mark[j]==0) { min=low[j]; pos=j; } } sum=sum+min; mark[pos]=1; for(j=1;j<=n;j++) { if(map[pos][j]<low[j]&&mark[j]==0) { low[j]=map[pos][j]; } } } return sum;}*/int prim(int start){ int pos,min; mark[start]=1; for(i=1;i<=n;i++) { low[i]=map[start][i]; } for(i=1;i<n;i++)//一定要注意这里是循环n-1次 { min=max; for(j=1;j<=n;j++) { if(low[j]<min && mark[j]==0) { min=low[j]; pos=j; } } sum+=min; mark[pos]=1; for(j=1;j<=n;j++) { if(map[pos][j]<low[j] && mark[j]==0) { low[j]=map[pos][j]; } } } return sum;}int main(){ while(~scanf("%d%d",&n,&m)) { sum=0; memset(mark,0,sizeof(mark)); memset(map,max,sizeof(map)); memset(low,max,sizeof(low)); while(m--) { scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c||map[b][a]>c) { map[a][b]=map[b][a]=c; } } int ans=prim(1); printf("%d\n",ans); }}/**************************************Problem id: SDUT OJ I
0 0
- 编写最小生成树代码遇到的小问题
- 编写代码遇到的问题
- 编写DLL遇到的小问题
- 小白+最小生成树Krusckal代码
- 编写代码期间遇到的问题
- 使用Pycharm 社区版配合anaconda进行代码编写遇到的一些小问题汇总
- 编写功能简化的bc遇到的小问题
- 【最小生成树】小天狼星的访问
- c++ builder 编写web services容易遇到的小问题
- 编写前台脚本时遇到的一些小问题
- c++ builder 编写web services容易遇到的小问题
- Tensorflow编写过程中遇到的各种小问题汇总
- 2014.10.7编写Android代码遇到的问题
- 编写android jni代码时遇到的问题
- 最小生成树的prim算法代码
- 最小生成树 kruskal的代码模版
- 最小生成树问题
- 最小生成树问题
- 哈夫曼树
- VB6 基于API的远程开机代码
- 【机器学习】bias and variance
- MyEclipse 新建->后面的菜单选项设置
- linux下为java设置正确的时区
- 编写最小生成树代码遇到的小问题
- 分类讨论
- LightOJ 1138(求末尾零个数)
- SDUTACM 数据结构实验之排序七:选课名单
- myeclipse集成maven
- leetcode 168 Excel Sheet Column Title C++
- Spring MVC 前后台传值情况汇总
- 杭电-1498 50 years, 50 colors(二分匹配)
- 状态不好