prim算法模板

var g:array[1..10,1..10] of longint;
  d:array[1..10] of longint;
  f:array[1..10] of boolean;
procedure prim;
  var i,j,k,min:longint;
  begin
    fillchar(g,sizeof(g),0);
    fillchar(f,sizeof(f),0);
    for i:=1 to n do d[i]:=g[1,i];
    f[1]:=true;
    for i:=2 to n do
      begin
        min:=oo;
        for j:=1 to n do
          if (f[j]=false) and (d[j]<min) then
            begin{这个边必须跨越两个集合}
              min:=d[j];
              k:=j;
            end;
              f[k]:=true;
              for j:=1 to n do//修改距离
                if (not f[j]) and (g[k,j]<d[j])) then
                  d[j]:=g[k,j];
            end;
  end;

prim算法模板,布布扣,bubuko.com

时间: 2024-10-20 16:21:00

prim算法模板的相关文章

图的最小生成树prim算法模板

用prim算法构建最小生成树适合顶点数据较少而边较多的图 prim算法生成连通图的最小生成胡模板伪代码: G为图,一般为全局变量,数组d为顶点与集合s的最短距离 Prim(G, d[]){ 初始化; for (循环n次){ u = 使d[u]最小的还未访问的顶点的标号; 记u 已被访问; for(从u出发到达的所有顶点v){ if (v未被访问&&以u为中介点使得v与集合S的嘴短距离d[v]更优){ 将G[u][v]赋值给v与结合S的最短距离d[v]; } } } } 邻接矩阵版: 1 /

Hihocoder 之 #1097 : 最小生成树一&#183;Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)

#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了! 但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道路所需要的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A.B.C三座城市,只需要在AB之间和BC之间建造道路,那么AC之间也是可以通过

ZOJ 1586 QS Network prim优化模板

链接: 1586 题意: 有一个N X N的网络,每两个点都有边相连,边的权值用邻接矩阵输入,每个点也有一个权值,当它们之间的那条边被选取时,需要加上两个点的权值.求这个网络的最小生成树. 直接套用prim算法的模板 其中用到一个节约内存的优化 将lowdistance 和visit 两个数组 结合起来 如果访问过lowdistance改成-1即可 另外该题中边的权值应为边本身的权值加上两端点的权值. #include<iostream> #include<cstdio> #inc

最小生成树第三弹ps:prim算法

prim算法的基本思想: 从连通网N={V,E}中的某一顶点U0出发,选择与它关联的具有最小权值的边(U0,v),将其顶点加入到生成树的顶点集合U中.以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合U中.如此继续下去,直到网中的所有顶点都加入到生成树顶点集合U中为止. 由于和dijkstra差不多,所以用邻接矩阵存储: 模板(低智商的我果断的把他取了个名字==) for (i = 1; i <= n; i++) for (j = 1; j

kruskal 算法模板

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2896 #include <stdio.h> #include <string.h> #include <stdlib.h> struct node { int u,v,w; }q[200001]; int bin[50001]; int n,m,ans; int cmp(const void *a,const void

hdu1875浅谈prim算法的朴素实现

阅读原题 题目大意 给你几个(<=100)小岛的坐标,然后你把所有的岛都修上桥连接起来,求最小花费,还有个附加的限制:只有岛之间的距离大于等于10,或小于等于1000时才能修桥. 大概是因为十米以内不用建桥,千米以上无法建桥.哈哈,说着玩的. 很明显这是一道MST(最小生成树)的题目,貌似也有人用并查集AC过. 最小生成树算法 概述 最小生成树的常用算法有两个kruskal和prim算法.两者都是不停地执行归并操作,然而一言以蔽之,两者的不同之处在于:kruskal----归并边:prim---

HDU1102 最小生成树prim算法

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意:给出任意两个城市之间建一条路的时间,给出哪些城市之间已经建好,问最少还要多少时间使所有的城市连通? 思路:已经建好的城市之间需要的时间设为0,就是求最小生成树的权值和了. 顺便复习一下prim算法. 知道思想就可以实现,才是合格的搬砖工,希望以后脱离模板. 附代码: /* prim 最小生成树算法 过程:prim算法将图分为两部分,假设原顶点集为V,将其分为S和V-S两部分,S为已经确定

最小生成树算法模板

#include<stdio.h>#include<string.h>#define Max 10000000int map[110][110],cost[110],vit[110],m,n;void prim(int x){    int i,j,min,k,sum=0;    memset(vit,0,sizeof(vit));    for(i=1;i<=m;i++)        cost[i]=map[x][i];    cost[x]=0;    vit[x]=1

【随便搞搞 1】 prim算法的学习和使用

最小生成树是图论中非常有用的算法. 就不知怎么的就学会的最小生成树~~ 但是最小生成树是什么呢? 标准定义如下:在边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小. 听起来非常的带劲,我们就一起来探讨这一求最小生成树的算法! prim 的四大特征: ●最小生成树算法中prim算法是耗时最长的 ●最小生成树算法中prim算法是适用于求稠密图的 ●最小生成树算法中prime算法最简单易懂 ●请不要多打一个e否则就是prime质数了 例子: P3366 [模板]最小生成树