prim算法的前向星实现
来源:互联网 发布:乎乎合适的词 编辑:程序博客网 时间:2024/05/16 02:27
#include <map>#include <set>#include <stack>#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;const int maxn=100;const int maxm=maxn*maxn;struct Edge { int from,to,w,next;};int n,m;int pre[maxn];//前向星存储法Edge e[maxm]; //存储边集bool vis[maxn]; //判断是否已加入生成树集合int dis[maxn]; //未确定点集到已确定点集的距离int main(){#ifdef LOCAL_DEBUGfreopen("input.txt","r",stdin);#endif while(~scanf("%d%d",&n,&m) && n+m) { memset(pre,-1,sizeof(pre)); memset(vis,0,sizeof(vis)); //假设无自环 int from,to,w; for(int i=0;i<m;i++) //无向图的存储 { scanf("%d%d%d",&from,&to,&w); e[i].from=from; e[i].to=to; e[i].w=w; e[i].next=pre[from]; pre[from]=i; std::swap(from,to); e[i+m].from=from; e[i+m].to=to; e[i+m].w=w; e[i+m].next=pre[from]; pre[from]=i+m; } memset(dis,INF,sizeof(dis)); dis[1]=0; int ans=0; for(int i=0;i<n;i++) //每次确定最小生成树的一个节点,n次确定n个节点 { int minw=INF,v; for(int x=1;x<=n;x++) //从候选点集中选择距离已确定点集最短的边 { if(!vis[x] && dis[x]<=minw) { minw=dis[x];v=x; } } ans+=minw; vis[v]=true; //标记找到的点 for(int k=pre[v];k!=-1;k=e[k].next) //利用此点更新候选点集各个点到已确定点集的距离 { if(e[k].w<dis[e[k].to] && !vis[e[k].to]) { dis[e[k].to]=e[k].w; } } } printf("%d\n",ans); } return 0;}
0 0
- prim算法的前向星实现
- 前向算法实现
- 【算法】链式前向星的静态链表实现
- 前向星式prim模板
- Prim算法的实现
- Prim算法的实现
- 【前向星】数据结构的实现
- 最短路的前向星实现
- 无向图的最小生成树算法的C程序实现代码(Prim算法)
- 图:最小生成树:prim算法 普里姆算法 ,(无向图的实现)
- 最小生成树模板(prim前向星)
- 无向图的最小支撑树Prim算法的实现
- 普里姆算法(prim)的实现
- Prim算法的简单实现
- prim算法的实现过程
- prim算法的java实现
- Prim算法的JAVA实现
- 用有向图的邻接矩阵存储结构实现prim算法
- Cocos2d-x学习笔记—内存管理机制
- DOM SAX和PULL解析
- sublimeText
- webRTC
- 牛客网程序员面试金典:1.1确定字符互异(java实现)
- prim算法的前向星实现
- Linux ssh安全配置
- RxJava 并发之意外情况处理
- 室内可见光定位系统的多径反射研究
- Linux U盘启动盘制作出现的问题
- mysql安装图解 mysql图文安装教程(详细说明)
- Android弹出式菜单-一种简单的实现方式
- vs2010+opencv2.4.9配置笔记
- 类型转换