#include "stdio.h"
#include "stdlib.h"
#define MAXINT 32767
#define MAX 100
/*普里母算法 以节点为向导,找出节点相连最短的边*/
/*
test data: 6 0 1 1 0 2 33 0 3 43 0 4 5 0 5 32 1 2 3 1 3 4 1 4 5 1 5 76 2 3 2 2 4 5 2 5 6 3 4 5 3 5 665 4 5 4 -1 -1 -1
result:
please input node num:
(V0 ,V1)(V1 ,V2)(V2 ,V3)(V0 ,V4)(V4 ,V5)the sum is 15
*/
//输入顶点和边信息
void read(int a[][MAX],int *v)
{
int n,i,j,w;
printf("please input node num:\n");
scanf("%d",&n);
if(n>MAX)
{
printf("input node value not > %d",MAX);
return;
}
*v=n;
//初始化a
for(i=0;i<n;i++)
for(j=0;j<n;j++)a[i][j]=MAXINT;
do
{
scanf("%d%d%d",&i,&j,&w);
if(i==-1||j==-1||w==-1)break;
a[i][j]=w;
}while(9);
}
void plmMST(int a[][MAX],int n)
{
int c,i,j,min_w,min_i,min_j,sum=0;
//开始选中0节点 扫描
a[0][0]=-1;
for(c=0;c<n-1;c++)
{
min_w = MAXINT;
min_i = -1;
min_j = -1;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
//从节点扫描,找出同i点相关的节点(该节点未访问)最小的权
if(i!=j&&(a[i][i]==-1&&a[j][j]!=-1||a[i][i]!=-1&&a[j][j]==-1)&&a[i][j]<min_w)
{
min_w=a[i][j];
min_i=i;
min_j=j;
}
}
}
//找到最小权 ,置为访问
if(min_i!=-1)
{
printf("(V%-2d,V%d)",min_i,min_j);
//a[min_i][min_j]=MAXINT;?
a[min_i][min_i]=a[min_j][min_j]=-1;
sum+=min_w;
}
else
{
printf("图不是连通的\n");
exit(-2);
}
}
printf("the sum is %d\n",sum);
}
void main()
{
int a[MAX][MAX],vnum;
read(a,&vnum);
plmMST(a,vnum);
}
分享到:
相关推荐
图的算法之一,最小生成树的普里姆算法 自己编写的,有不足的地方欢迎大家指出来
数据结构的课程设计。用普里姆算法求图的最小生成树
在本项目中,使用MFC实现界面化,意味着用户可以通过图形界面输入图的信息,程序会自动运行普里姆算法,计算最小生成树,并将结果以可视化的形式展示出来。 在实际应用中,首先需要设计一个界面,包括输入图的节点...
【算法与数据结构实验三Prim最小生成树】 实验三的核心目标是通过Prim算法来构建一个无向图的最小生成树。最小生成树是一棵包含了图中所有顶点的树,其边的权重之和最小。Prim算法是一种有效的解决此问题的方法。 ...
理解并熟练运用普里姆算法,不仅可以解决最小生成树的问题,还能为学习其他图算法如Kruskal算法打下基础,同时也对理解和优化复杂网络系统有重要意义。在数据结构和算法的学习过程中,掌握这些基本算法对于提升编程...
普里姆算法是一种贪心算法,用于寻找加权图的最小生成树。它从一个顶点开始,每次加入距离当前已构造部分最近的一个顶点及其连接边,直到包含所有顶点为止。 #### 2.2 实现 给定文件提供了两种不同的实现方式,一种...
基于matlab的最小生成树的prim算法,有详细的解释,可直接运行
最小生成树之普里姆算法
利用普里姆算法求解最小生成树 利用普里姆算法求解最小生成树 利用普里姆算法求解最小生成树
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Class)库来实现普里姆算法,从而构建一个可视化界面,展示最小生成树。MFC是微软提供的一种C++类库,用于开发Windows应用程序,它提供了丰富的用户界面...
数据结构 普里姆算法建立最小生成树 c语言 源代码
若要在n个城市之间建设通信网络,只需要架设n-1条线路即可。如何以最低的经济代价建设这个通信网,是一个网...(2)利用普里姆算法和克鲁斯卡尔算法求网的最小生成树; (3)按顺序输出生成树中各条边以及它们的权值。
用C++实现的图的建立 以及用普里姆算法和克鲁斯卡尔算法求图的最小生成树
普里姆算法生成最小生成树课程设计报告书.doc
【最新精选】普里姆算法生成最小生成树_课程设计.doc
普里姆算法从一个初始顶点开始,逐步扩展最小生成树,直到包括所有顶点。算法的核心是在每次迭代中找到与当前树连接的边中权重最小的一条,然后将这条边的另一端加入树中。具体步骤如下: 1. 选择一个起始顶点,将...
Kruskal算法的基本思想是从图中所有的边中,按照权值从小到大的顺序,选择边并添加到最小生成树中。在添加每条边之前,算法会检查这条边是否与已经选择的边形成环,如果会形成环,则舍弃这条边。算法重复上述过程,...
本课程设计的主要目的是实现图的最小生成树,使用普里姆算法来实现。普里姆算法是一种常用的图算法,用于寻找无向图中的最小生成树。该算法通过逐个遍历图中的顶点,记录权值最小的边,并将其组合成最小生成树。 图...
本文将介绍如何使用C语言实现两种经典算法——普里姆算法和克鲁斯卡尔算法来找到一个无向加权图的最小生成树。 普里姆算法是一种贪心算法,它通过逐步增加边来构建最小生成树。在C语言中,我们可以这样实现: 1. ...
C语言写的 数据机构的课程设计,用普利姆算法构造最小生成树。。想要的可以下载。。。