prim(n^2)求图中最小距离(最小生成树)
来源:互联网 发布:淘宝导航条颜色表 编辑:程序博客网 时间:2024/06/03 15:53
#include<iostream>const int maxn=1001,inf=1000000000;using namespace std;int a[maxn][maxn],d[maxn],p[maxn];int main(){int i,j,k,m,n;scanf("%d%d",&n,&m);//共n个点m条边 求走遍所有点的最小路径 for(i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);a[x][y]=a[y][x]=z;}for(i=1;i<=n;i++)d[i]=inf;d[1]=0;int ans=0;for(i=1;i<=n;i++){int zx=inf;for(j=1;j<=n;j++)//找到离原点(注意是原点)最近的没有走过的点 使更新次数尽量少if(!p[j] && d[j]<zx){zx=d[j];k=j;}p[k]=1;ans+=d[k];//prim与dijkstra不一样的地方 for(j=1;j<=n;j++)if(!p[j] && a[k][j]!=0 && d[j]>a[k][j])d[j]=a[k][j];//prim的d数组存的到该点的最后一条边的长度 dijkstra存的是原点到该点的路径总长 }printf("%d",ans);return 0;}prim是从某点开始每次走到离此点最近的点
简单说一下prim与dijkstra的区别:
prim(貌似跟最小生成树是一样的吧)求的是图内保证所有点联通的最短路径和
dijkstra求的是图内某点到所有点的最短路径
所以数组存的也不一样 prim的数组存的的只是一条边的长度 dijkstra存的是多条边的长度和(目标点到原点的最短路)
本人刚入门 如有错误请见谅
0 0
- prim(n^2)求图中最小距离(最小生成树)
- 最小生成树prim n^2
- 最小生成树(prim)
- 最小生成树(Prim)
- prim(最小生成树)
- 最小生成树(prim)
- 最小生成树(Prim)
- 最小生成树(2)--Prim算法
- 最小生成树(Prim)(普利姆最小生成树)
- 最小生成树 prim(与边无关,适合稠密的图,o(n^2))
- Prim 算法求最小生成树 O(n^2)
- 最小生成树之PRIM-O(n^2)
- Prim 算法求最小生成树 O(n^2)
- 最小生成树(prim)(C++)
- 最小生成树(prim算法)
- HDU 3371(最小生成树,Prim)
- 最小生成树(Prim模板)
- POJ 1258 : 最小生成树(Prim)
- 【转】ORACLE EXP/IMP 命令
- 华为OJ——等差数列
- glide 缓存处理
- Unity网络编程教学视频(本人第一次录制)
- 剑指offer39_树的深度
- prim(n^2)求图中最小距离(最小生成树)
- Android ViewDragHelper源码解析
- Binary Tree Maximum Path Sum
- VIM常用基本命令
- HDU 5706 暴力dfs
- 数据脱敏工具类
- python3.x与python2.x的不同(一)
- 反转链表
- 装饰器模式