上面是题目:实际上的结果应该是
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;//最终找到的边