数据结构 图的应用

本文介绍了如何使用C#实现最小生成树问题,具体为克鲁斯卡尔算法。内容包括问题描述、基本要求、解决思路以及代码实现,最终展示运行结果。该算法用于在网络建设中寻找成本最低的通信网络连接方案。
摘要由CSDN通过智能技术生成

最小生成树问题

问题描述

若要在n个城市之间建设通信网络,只需要假设n-1条线路即可。如何以最低的经济代价建设这个通信网,是一个网的最小生成树问题。

基本要求

1. 利用克鲁斯卡尔算法求网的最小生成树。
2. 要求输出各条边及它们的权值。

思路

通信线路一旦建成,必然是双向的。因此,构造最小生成树的网一定是无向网。设图的顶点数不超过30个,并为简单起见,网中边的权值设成小于100的整数。
图的存储结构的选取应和所作操作相适应。为了便于选择权值最小的边,此题的存储结构既不选用邻接矩阵的数组表示法,也不选用邻接表,而是以存储边(带权)的数组表示图。

代码实现C#

public class Marx
    {
   
        private int[] distance;
        private int row;
        private ArrayList ways = new ArrayList();

        public Marx(int n, params int[] d)
        {
   
            this.row = n;
            distance = new int[row * row];
            for (int i = 0; i < row * row; i++)
            {
   
                this.distance[i] = d[i];
            }
            for (int i = 0; i < this.row; i++)  //有row个点,则从中心到各点的路有row-1条
            {
   
                ArrayList w = new ArrayList();
                int j = 0;
                w.Add(j);
                ways.Add(w);
            }
        }
        //------------------------------
        public void Find_way()
        {
   
            ArrayList S = new ArrayList(1);
            ArrayList Sr = new ArrayList(1);
            int[] Indexof_distance = new int
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值