首页 > 编程语言 >prim算法

prim算法

时间:2023-06-29 23:02:30浏览次数:48  
标签:vexnum prim arcs int MGraph ++ 算法 lowcost

#include <stdio.h>
#define N 20
#define TRUE 1
#define INF 32766
#define INFIN 32767

typedef struct {
	int vexnum, arcnum;
	char vexs[N];
	int arcs[N][N];
}
MGraph;

void createMGraph_w(MGraph *g);
void prim(MGraph *g, int u);

//创建带权无向图的邻接矩阵
void createMGraph_w(MGraph *g) {
	char v;
	int i = 0, j, w;
	int arc = 0, vex = 0;
	for (int a = 0; a < N; a++)
		for (int b = 0; b < N; b++)
			g->arcs[a][b] = INFIN;
	for (int c = 0; c < N; c++)
		g->arcs[c][c] = 0;
	v = getchar();
	while (v != '#') {
		g->vexs[i] = v;
		v = getchar();
		i++;
		vex++;
	}
	getchar(); // 跳过换行符

	g->vexnum = vex;

	scanf("%d,%d,%d", &i, &j, &w);
	while (i != -1 && j != -1 && w != -1) {
		g->arcs[i][j] = w;
		arc++;
		scanf("%d,%d,%d", &i, &j, &w);
	}
	g->arcnum = arc;
}


//最小生成树Prime算法
void prim(MGraph *g, int u) {
	int lowcost[N], closest[N], i, j, k, min;
	for (i = 0; i < g->vexnum; i++) {
		closest[i] = u;
		lowcost[i] = g->arcs[u][i];
	}
	lowcost[u] = 0;
	for (i = 1; i < g->vexnum; i++) {
		min = INFIN;
		for (j = 0; j < g->vexnum; j++) {
			if (lowcost[j] != 0 && lowcost[j] < min) {
				min = lowcost[j];
				k = j;
			}
		}
		printf("(%c,%c)--%d\n", g->vexs[closest[k]], g->vexs[k], lowcost[k]);
		lowcost[k] = 0;
		for (j = 0; j < g->vexnum; j++) {
			if (g->arcs[k][j] < lowcost[j] && g->arcs[k][j] != 0) {
				lowcost[j] = g->arcs[k][j];
				closest[j] = k;
			}
		}
	}
}

int main() {
	MGraph ga;
	int i;
	createMGraph_w(&ga);
	scanf("%d", &i);
	prim(&ga, i);
	return 0;
}

标签:vexnum,prim,arcs,int,MGraph,++,算法,lowcost
From: https://blog.51cto.com/u_16030624/6586248

相关文章

  • 数据结构和算法-2023.06.29
    斐波那契数列初衷......
  • 欧几里得(及其扩展算法)
    欧几里得算法算法内容计算两个数的最大公约数的算法,也叫辗转相除法。即:gcd(a,b)=gcd(b,a%b)。数学证明设gcd(a,b)=d,则必定有:d|a且d|b,则必定有d|(ax+by)而a%b=a-a/b*b,所以d|(a%b),则d必定为b和a%b的约数,并且a%b必定小于a则d必定为b和a%b的最大公约数。-代码实现优美,太优......
  • MATLAB代码:基于粒子群算法的储能优化配置 关键词:储能优化配置 粒子群 储能充放电优
    MATLAB代码:基于粒子群算法的储能优化配置关键词:储能优化配置粒子群 储能充放电优化 参考文档:无明显参考文档,仅有几篇文献可以适当参考仿真平台:MATLAB平台采用粒子群实现求解优势:代码注释详实,适合参考学习,非目前烂大街的版本,程序非常精品,请仔细辨识 主要内容:建立了储能的......
  • 电子凸轮追剪曲线生成算法
    电子凸轮追剪曲线生成算法。品牌:麦格米特(算法,理解后可转成其他品牌PLC或任何一种编程语言)只有程序原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/633554519425.html......
  • 音乐推荐系统 系统算法:基于用户的协同过滤推荐算法
    音乐推荐系统系统算法:基于用户的协同过滤推荐算法编程语言:python数据库:sqlite框架:MVCweb应用框架:Django解压就可以运行(自己需要有调试项目环境的能力),需要软件python和pycharm或者Anaconda项目有配套的文档原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/678695319073.......
  • 基于Matlab的主动配电网实时无功优化 考虑风电和光伏的接入,采用多目标粒子群算法,以网
    基于Matlab的主动配电网实时无功优化考虑风电和光伏的接入,采用多目标粒子群算法,以网损和电压偏差为目标,优化变压器分接头、无功补偿器实现24小时无功优化,算例采用IEEE33进行仿真分析,对优化前后的电压和网损进行了分析。这段程序主要是一个多目标粒子群优化算法(MOPSO),用于解决电力......
  • 基于粒子群算法的电力系统最优潮流 以IEEE30节点的六机为对象,建立考虑功率平衡、机组
    基于粒子群算法的电力系统最优潮流以IEEE30节点的六机为对象,建立考虑功率平衡、机组爬坡约束、出力限制约束的电力系统经济调度模型,采用粒子群算法对模型进行求解,得到六个机组的最优运行计划,确定系统最优运行成本。这段程序主要是一个基于粒子群优化算法(PSO)的电力系统调度程序。......
  • 文心一言 VS 讯飞星火 VS chatgpt (51)-- 算法导论6.2 3题
    三、当元素A[i]比其孩子的值都大时,调用MAX-HEAPIFY(A.i)会有什么结果?文心一言:当元素A[i]比其孩子的的值都大时,调用MAX-HEAPIFY(A,i)会将A[i]与其孩子中的最小值进行交换,并将A[i]视为新的根节点。这个操作会使得以A[i]为根节点的子树满足最大堆的性质,即根节点比其左......
  • 学不会的排序算法
    什么是排序所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法的评价标准(1)时间复杂度(2)空间复杂度(3)排序方式(4)稳定性废话不多说,我们直接开始吧选择排序选择排序(Selectionsort)是一种......
  • bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab 程序
    bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab程序,直接运行即可。数据excel格式,注释清楚,效果清晰,一步上手。"使用交叉验证算法和确定最佳隐含层节点个数的bp神经网络,可以通过编写注释清晰、效果清晰的Matlab程序来处理Excel格式的数据。这个方法可以帮助您快速上手,实现......