记录一次失败的prim算法【c#】耗时6个钟

在这里插入图片描述
上面是题目:实际上的结果应该是
A E D C B G F

…我又算错了,这次的错误显示在,他已经遍历到了
A A E D C D

在这里插入图片描述

首先是我自己之前制作的 顺序表 seqList 接口就不写了直接 放功能

private T[] datas;
            private int ListLength;
            private int ListSize;
            //private int index;//序号 虽然不知道有没有用

            public seqList(int size)
            {
   
                ListSize = size;
                datas = new T[ListSize];
                ListLength = 0;

            }

            public seqList()
            {
   
            }

            public void getMinEdge()
            {
   
            throw new NotImplementedException();
             }
            public void ClearList()
            {
   
                ListLength = 0;
            }
            
            public int GetLenth()
            {
   
                return ListLength;
            }

            public bool IsEmpty()
            {
   
                return ListLength == 0;
            }
            public void ListInsert(T item, int index)
            {
   
               if (!IsFull())
                {
   
                    for (int i = ListSize - 2; i >= index; i--)/
                    {
   
                        datas[i + 1] = datas[i];//这个循环被跳过了
                    }
                    datas[index] = item;
                    ListLength++;
                }
            }
            public void Pop(T item)
           {
   
              if (ListLength < ListSize)
             {
   
                datas[ListLength] = item;
                ListLength++;
             }
           }
            public T Peek(int index)
              {
   
                return datas[index];
              }
            

然后是边 Edge的类

class Edge
    {
   
        //边的属性需要哪些参数,首先是需要A点,其次是需要B点
        //还需要这些边的权值,最后是bool值
        public int NodeIndexA;
        public int NodeIndexB;
        public int edgeValue;
        public bool isSelected;

        public Edge(int indexA,int indexB,int value)
        {
   
            NodeIndexA = indexA;
            NodeIndexB = indexB;
            edgeValue = value;
            isSelected = false;
        }

接下来就是prim算法的类,这个类是我之前自己制作图的类,
不过我把默认所有无向图最开始的值设置为了50(比其余所有的值都要大)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 图csharp
{
   
    class myPic : iPic
    {
   
        private int Capacity;
        private int NodeCount;
        Queue<int> GDdata = new Queue<int>();//把看见的边都存起来;
        public int seqNodeCount;
        private int[] array;//邻接矩阵
        private picNode[] NodeArray;

        //普里姆树所需要的  顺序表
        public seqList<picNode> seqNodeLists;//备用点
        public seqList<Edge> seqEdgeLists;//备用边储存
        public seqList<picNode> MinNodeList;//最小的点
        public seqList<Edge> SelectMindEdgeLists;//最终找到的边

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值