数据结构图之prime算法详解

简介: 数据结构图之prime算法详解

本篇为文章是写的prime算法,本人见书上算法只有伪代码于是想着写出一个能跑的prime算法

本人写了一个下午的prime算法,但是运行的结果是不正确的 (本人是个小菜鸡) 经过朋友的帮助,运行结果正确。

我觉得算法主要先理解思想   在去试图打出分部的伪代码 最后打出能跑的代码

不多说上代码

# include <stdio.h>
# define  m 31715
# define maxs 100
typedef struct {
  int v[maxs];         // 顶点表
  int arc[maxs][maxs];//边表
  int v1, a1, w;      //顶点数  和边数  权数
} tu;
int getid(tu t, int i) {
  for (int j = 0; j < t.v1; j++) {
    if (i == t.v[j])
      return j;
  }
  return -1;
}
tu creat (tu t) {
  printf("请输入定点数和边数");
  //输入顶点数    边数
  scanf("%d", &(t.v1));
  //  printf("进行到这了");
  scanf("%d", &(t.a1));
  for (int i = 0; i < t.v1; i++) { //初始化  顶点表
    printf("请输入顶点");
    scanf("%d", &t.v[i]);
  }
  printf("请输入边的权值");
  for (int i = 0; i < t.v1; i++) {
    for (int j = 0; j < t.v1; j++) {
      scanf("%d", &t.arc[i][j]);
      t.arc[j][i] = t.arc[i][j];
    }
  }
 for(int i=0;i<t.v1;i++)
     {
         for(int j=0;j<t.v1;j++)
         {
             printf("%d ",t.arc[i][j]);
         }
         printf("\n");
     }  
  return t;
}
void prime(tu *t) {
  int tree[t->v1];  //用于存放邻接节点
  int adjest[t->v1]; 
  int lowcost [t->v1];  //用于存放到各边的权值
//初始化
  for (int i = 0; i < t->v1; i++) {
    lowcost[i] = t->arc[0][i];  //    先按以0为起点   到各边的权值
    adjest[i]=0;
    tree[i] = 0;                 //表示  各边均以 0  为起点
  }
//寻找   lowcost中最小值
//要遍历
    int cnt=0;
  for (int w = 1; w < t->v1; w++) {
    int min, k;min = 32767;//设置初始最小值
    for (int i = 1; i < t->a1; i++) { //进行遍历     找到  lowcost中最小值   来确定  下一个进树的节点
      if (lowcost[i] < min && lowcost[i] > 0) { //     =0   表示已经进树
        min = lowcost[i] ;            //赋值
        k = i;                     //记录i的值  用于后续进树操作和更新lowcost操作
      }
    }
    tree[++cnt] = k;
    lowcost[k] = 0;
    for (int i = 1; i < t->v1; i++) { //为什么从1开始  ?    因为  lowcost数组中第一个数已经在树中  lowcost【0】=0;一定不满足下边if语句
      if ( (lowcost[i]<0 || lowcost[i] > t->arc[k][i] )&& t->arc[k][i] >= 0) {
        lowcost[i] = t->arc[k][i]; //   当满足if语句时    说明lowcost需要更新  把二维数组中的k行i列数据进行赋值
                     //表示这条边的起点为  k
        //  printf("here");
        adjest[i]=k;
      }
    }
  }
  printf("入树的顺序");
  for (int i = 0; i < t->v1; i++) {
    printf("%d ", tree[i]);
  }
printf("\n");
printf("边的前驱"); 
  for (int i = 0; i < t->v1; i++) {
    printf("%d ", adjest[i]);
  }
}
int main() {
  tu  t;
  t = creat(t);
  prime(&t);
  /*
  prime    算法
             建立 lowcost  数组
          用于存放最小生成树的邻接边
           如果两条边都指向同一个顶点    则 把最小的存入   lowcost
    设置最小值   min   =312715
     比min小  则会进行  赋值
     用for循环   进行全部比较
     最后保留的是   最小权的下标和权值
      下标的   lowcost    为0   则表示进树
      则   lowcost会更新
      如果   新进入树的节点的二维数组 中 第i个值   比lotcost   中第i个值   小则赋值
      tree[i]=k;    k  是    进入树的节点的下标
      输出tree
  */
  return 0;
}
相关文章
|
8天前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
34 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
11天前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
17 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
4天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
17 4
|
11天前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
12 0
数据结构与算法学习十四:常用排序算法总结和对比
|
11天前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
21 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
11天前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
11天前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
13 0
|
17天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
1天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。
|
4天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。