当前位置: 首页 > news >正文

外贸网站建设公司教程律师免费咨询电话

外贸网站建设公司教程,律师免费咨询电话,wordpress文章缩略图,长治网站运营一,prim算法逻辑1.理解:克鲁斯卡尔算法关注的是边,普里姆算法关注的是点把图中每个顶点比作孤岛,点亮一座孤岛就可以解锁附近的孤岛每次解锁的点都是离自身最近的点2.普里姆算法流程a.采用邻接矩阵表示,考虑要查找最小…

一,prim算法逻辑

1.理解:克鲁斯卡尔算法关注的是边,普里姆算法关注的是点

把图中每个顶点比作孤岛,点亮一座孤岛就可以解锁附近的孤岛

每次解锁的点都是离自身最近的点

 2.普里姆算法流程

a.采用邻接矩阵表示,考虑要查找最小值,初始化不存在的边的值为INF

b.准备工作

cost边的权值数组,保存到该条边的权值

mark标记已访问的点

visit从哪个顶点访问过来的

c.执行操作

任意找到一个激活点,更新三个数组

从cost数组找到权值最小的顶点,激活该顶点

在边集数组中保存visit和当前节点的编号,以及权值

重复c操作

二,代码实现

1.头文件中的接口

//
// Created by 27893 on 2025/8/1.
//#ifndef PRIM_H
#define PRIM_H
#include "common.h"
#include "../MatrixGraph/MatrixGraph.h"int primMGraph(MGraph*graph,int startV,EdgeSet*result);
#endif //PRIM_H
//
// Created by 27893 on 2025/8/1.
//#ifndef COMON_H
#define COMON_H
typedef struct {int begin;int end;int weight;
}EdgeSet;
#endif //COMON_H

2.将头文件中的接口一一实现

//
// Created by 27893 on 2025/8/1.
//#include <stdio.h>
#include <stdlib.h>
#include "Prim.h"int primMGraph(MGraph *graph, int startV, EdgeSet *result) {int*cost=malloc(sizeof(int)*graph->nodeNum);int*mark=malloc(sizeof(int)*graph->nodeNum);int*visit=malloc(sizeof(int)*graph->nodeNum);if (cost==NULL||mark==NULL||visit==NULL) {return 0;}int sum=0;//初始化激活startvfor (int i=0;i<graph->nodeNum;i++) {cost[i]=graph->edges[startV][i];mark[i]=0;if (graph->edges[startV][i]<INF) {visit[i]=startV;}else {visit[i]=i;}}mark[startV]=1;for (int i=0;i<graph->nodeNum-1;i++) {//1.在cost找到最小值int k=0,mini=INF;for (int j=0;j<graph->nodeNum;j++) {if (mark[j]==0&&cost[j]<mini) {mini=cost[j];k=j;}}//2.更新边集数组result[i].begin=visit[k];result[i].end=k;result[i].weight=mini;mark[k]=1;sum+=mini;//3.更新cost数组for (int j=0;j<graph->nodeNum;j++) {if (mark[j]==0&&graph->edges[k][j]<cost[j]) {cost[j]=graph->edges[k][j];visit[j]=k;}}}free(cost);free(mark);free(visit);return sum;
}

3,测试是否有bug

//
// Created by 27893 on 2025/7/31.
//
#include <stdio.h>
#include <stdlib.h>#include "Kruskal.h"
#include "Prim.h"void setupMGraph01(MGraph *graph, int edgeValue) {const char *names[] = {"A", "B", "C", "D", "E", "F", "G"};initMGraph(graph, names, 7, 0, edgeValue);addMGraph(graph, 0, 1, 12);addMGraph(graph, 0, 5, 16);addMGraph(graph, 0, 6, 14);addMGraph(graph, 1, 2, 10);addMGraph(graph, 1, 5, 7);addMGraph(graph, 2, 3, 3);addMGraph(graph, 2, 4, 5);addMGraph(graph, 2, 5, 6);addMGraph(graph, 3, 4, 4);addMGraph(graph, 4, 5, 2);addMGraph(graph, 4, 6, 8);addMGraph(graph, 5, 6, 9);
}
void test01() {MGraph graph;EdgeSet*edges;int num;EdgeSet*result;int sumweight;setupMGraph01(&graph,0);edges=malloc(sizeof(EdgeSet)*graph.edgeNum);num=initEdgeSet(&graph,edges);printf("edges num:%d\n",num);sortEdgeSet(edges,num);result=malloc(sizeof(EdgeSet)*graph.nodeNum-1);sumweight=kruskalMGraph(&graph,edges,num,result);printf("sumweight:%d\n",sumweight);for (int i=0;i<graph.nodeNum-1;i++) {printf("edges[%d]:%s----%d----%s\n",i+1,graph.vex[result[i].begin].show,result[i].weight,graph.vex[result[i].end].show);}
}
void test02() {MGraph graph;setupMGraph01(&graph,INF);EdgeSet*result;result=malloc(sizeof(EdgeSet)*(graph.nodeNum-1));int sum=primMGraph(&graph,0,result);printf("sumWeight:%d\n",sum);for (int i=0;i<graph.nodeNum-1;i++) {printf("edges[%d]:%s----%d----%s\n",i+1,graph.vex[result[i].begin].show,result[i].weight,graph.vex[result[i].end].show);}
}
int main() {test01();test02();return 0;
}

http://www.dtcms.com/a/456204.html

相关文章:

  • 内蒙古工程建设协会网站合肥做网站做推广
  • 网站开发与制作中期报告宣武手机网站建设
  • 统计后台网站有哪些服装设计师常用网站
  • 水利建设管理司网站wordpress分享到快手
  • 山东网站建设哪家权威手机网站 案例
  • 福建省建设厅官方网站福建建筑人才服务中心
  • 英文网站一般用什么字体卫浴洁具网站模板
  • 做酒吧设计的网站企业网站托管注意事项
  • 网站名称设置川畅咨询 做网站多少钱
  • 龙华公司网站建设如何在百度上建网站
  • 福州做网站哪家好网站建设套模版
  • 网站空间可以换吗顺德网站建设效果
  • 滁州市建设局网站四川省建设人才网
  • ps网站怎么做滑动背景网站搭建报价表
  • 成都网站设计平台地方房地产网站seo实战案例分享
  • 如何诊断网站为何被降权云服务器怎么建立网站
  • 设计方案表网站名称怎么随便搞个网站
  • 如何查看vs中建设好的网站做团购网站需要什么
  • 东明县住房和城乡建设局网站国家企业信用公示(上海)
  • 怎样查看别人的网站是怎么建设中企动力邮箱登陆首页
  • 医院网站建设论证报告三亚网
  • 推广优化网站排名wordpress固定字段
  • 网站开发和游戏开发哪个好网站后台主流网站开发语言
  • 寿光做网站精兴装修公司怎么样
  • 新网站怎么做seo动漫设计的就业前景
  • 移动局域网ip做网站网站开发职责
  • php网站开发实验报告上海企业建站流程
  • 网站维护成本网站维护的作用
  • 济南营销型网站网站备案 接入商名称
  • 哈尔滨专业网站营销秦皇岛陵县网站建设