并查集求最小生成树

什么是并查集请点这里
prime算法求最小生成树,本程序的题目条件来源于这篇文章
之前写过prime算法求最小生成树的代码,昨天知道了并查集算法后,就用并查集算法再写一遍求最小生成树的题目。

# include <stdio.h>
# include <stdlib.h>
# include <algorithm>
//读本程序之前 先看一下prime算法求最小生成树那个文章链接,看题目要求
int node[100];
using namespace std;
typedef struct //代表边的结构体
{
    int i,j,a;  //i为起始节点   j为终止节点  a为边长
}vex;
void CreateGraph(vex v[100],int n)
{
    int i,j,k=1;
    FILE *fp;

    for(i=0;i<n;i++)//边的起始点与结束点赋值,因为是从文件中的矩阵图读入数据,所以可选择的边定为36条
    {

        for( j =0;j<n;j++)
        {
            v[i*6 +j].j = j;//终止节点为j
            v[i*6 +j].i = i; //起始节点为i
        }
    }
    if((fp = fopen("zrxprim.txt","r"))==NULL)
    {
        printf("can not open file\n");
    }
    for(i=0;i<n;i++)//边赋初值
    {
        for(j=0;j<n;j++)
        {
            fscanf(fp,"%d",&(v[i*6+j].a));//给每条边的长度赋值
        }
    }
    if(fclose(fp))
    {
        printf("can not close the file\n");
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%6d ",v[i*6+j].a);//输出图的矩阵
        }
        printf("\n");
    }
    printf("有向图的存储结构建立完毕!\n");
}
bool comp(vex a,vex b) //根据边长从小到大排序
{
    return a.a<b.a;
}
int find(int i)
{
    return i==node[i] ? i :find(node[i]);
}
void main()
{
     vex v[100];
    CreateGraph(v,6); //固定有6个节点
    for(int i = 0;i<6;i++)
    {
        node[i] = i;
    }
    int bian = 0;
    int sum = 0;
    sort(v,v+6*6,comp);
    printf("start_vex stop_vex\n");

    for(int i = 0;bian < 6-1;i++)
    {
        if(find(v[i].i) != find(v[i].j))
        {
            node[find(v[i].j)] = find(v[i].i);
            printf("%6d %6d         %6d\n",v[i].i,v[i].j,v[i].a);
            bian++;
            sum+=v[i].a;
        }
    }
    printf("最小生成树长度:%d",sum);
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值