最小生成树 - 加权无向图(算法第四版)
约定
这里只简单的介绍一般情况下的最小生成树问题,因此最加权图数据做了一些规定:
- 只考虑连通图(如果不满足会产生最小森林)
- 所有边的权重不同(不满足会出现多个最小生成树)
加权图数据结构
using System;
using System.Collections.Generic;
using System.Text;
namespace 图
{
public class EdgeWeightedGraph
{
private List<Edge>[] _adj; //邻接表
private int _v; //结点数
private int _e; //边数
/// <summary>
/// 按文件数据生成一个加权无向图,
/// </summary>
/// <param name="path">图文件路径</param>
public EdgeWeightedGraph(string path)
{
string line;
System.IO.StreamReader sr = new System.IO.StreamReader(path);
_v = Convert.ToInt32(sr.ReadLine());
_e = 0;
_adj = new List<Edge>[_v];
for (int i = 0; i < _v; i++) { _adj[i] = new List<Edge>(); }
while ((line = sr.ReadLine()) != null)
{
string[] str = line.Split(' ');
int a = Convert.ToInt32(str[0]);
int b = Convert.ToInt32(str[1]);
float w = (float)Convert.ToDouble(str[2]);
AddEdge(new Edge(a,b,w));
}
}
public int V => _v;
public int E => _e;
public EdgeWeightedGraph(int v)
{
this._v = v;
_adj = new List<Edge>[v];
}
public void AddEdge(Edge e)
{
int v = e.Either