mirror of
https://github.com/gonum/gonum.git
synced 2025-10-08 08:30:14 +08:00
graph/simple: separate weighted and unweighted edge implementations
This commit is contained in:
@@ -34,9 +34,9 @@ type spanningGraph interface {
|
||||
var spanningTreeTests = []struct {
|
||||
name string
|
||||
graph func() spanningGraph
|
||||
edges []simple.Edge
|
||||
edges []simple.WeightedEdge
|
||||
want float64
|
||||
treeEdges []simple.Edge
|
||||
treeEdges []simple.WeightedEdge
|
||||
}{
|
||||
{
|
||||
name: "Empty",
|
||||
@@ -49,7 +49,7 @@ var spanningTreeTests = []struct {
|
||||
// to prevent the alternative solution being found.
|
||||
name: "Prim WP figure 1",
|
||||
graph: func() spanningGraph { return simple.NewWeightedUndirectedGraph(0, math.Inf(1)) },
|
||||
edges: []simple.Edge{
|
||||
edges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('B'), W: 2.5},
|
||||
{F: simple.Node('A'), T: simple.Node('D'), W: 1},
|
||||
{F: simple.Node('B'), T: simple.Node('D'), W: 2},
|
||||
@@ -57,7 +57,7 @@ var spanningTreeTests = []struct {
|
||||
},
|
||||
|
||||
want: 6,
|
||||
treeEdges: []simple.Edge{
|
||||
treeEdges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('D'), W: 1},
|
||||
{F: simple.Node('B'), T: simple.Node('D'), W: 2},
|
||||
{F: simple.Node('C'), T: simple.Node('D'), W: 3},
|
||||
@@ -67,7 +67,7 @@ var spanningTreeTests = []struct {
|
||||
// https://upload.wikimedia.org/wikipedia/commons/5/5c/MST_kruskal_en.gif
|
||||
name: "Kruskal WP figure 1",
|
||||
graph: func() spanningGraph { return simple.NewWeightedUndirectedGraph(0, math.Inf(1)) },
|
||||
edges: []simple.Edge{
|
||||
edges: []simple.WeightedEdge{
|
||||
{F: simple.Node('a'), T: simple.Node('b'), W: 3},
|
||||
{F: simple.Node('a'), T: simple.Node('e'), W: 1},
|
||||
{F: simple.Node('b'), T: simple.Node('c'), W: 5},
|
||||
@@ -78,7 +78,7 @@ var spanningTreeTests = []struct {
|
||||
},
|
||||
|
||||
want: 11,
|
||||
treeEdges: []simple.Edge{
|
||||
treeEdges: []simple.WeightedEdge{
|
||||
{F: simple.Node('a'), T: simple.Node('b'), W: 3},
|
||||
{F: simple.Node('a'), T: simple.Node('e'), W: 1},
|
||||
{F: simple.Node('b'), T: simple.Node('c'), W: 5},
|
||||
@@ -89,7 +89,7 @@ var spanningTreeTests = []struct {
|
||||
// https://upload.wikimedia.org/wikipedia/commons/8/87/Kruskal_Algorithm_6.svg
|
||||
name: "Kruskal WP example",
|
||||
graph: func() spanningGraph { return simple.NewWeightedUndirectedGraph(0, math.Inf(1)) },
|
||||
edges: []simple.Edge{
|
||||
edges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('B'), W: 7},
|
||||
{F: simple.Node('A'), T: simple.Node('D'), W: 5},
|
||||
{F: simple.Node('B'), T: simple.Node('C'), W: 8},
|
||||
@@ -104,7 +104,7 @@ var spanningTreeTests = []struct {
|
||||
},
|
||||
|
||||
want: 39,
|
||||
treeEdges: []simple.Edge{
|
||||
treeEdges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('B'), W: 7},
|
||||
{F: simple.Node('A'), T: simple.Node('D'), W: 5},
|
||||
{F: simple.Node('B'), T: simple.Node('E'), W: 7},
|
||||
@@ -117,7 +117,7 @@ var spanningTreeTests = []struct {
|
||||
// https://upload.wikimedia.org/wikipedia/commons/2/2e/Boruvka%27s_algorithm_%28Sollin%27s_algorithm%29_Anim.gif
|
||||
name: "Borůvka WP example",
|
||||
graph: func() spanningGraph { return simple.NewWeightedUndirectedGraph(0, math.Inf(1)) },
|
||||
edges: []simple.Edge{
|
||||
edges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('B'), W: 13},
|
||||
{F: simple.Node('A'), T: simple.Node('C'), W: 6},
|
||||
{F: simple.Node('B'), T: simple.Node('C'), W: 7},
|
||||
@@ -141,7 +141,7 @@ var spanningTreeTests = []struct {
|
||||
},
|
||||
|
||||
want: 83,
|
||||
treeEdges: []simple.Edge{
|
||||
treeEdges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('C'), W: 6},
|
||||
{F: simple.Node('B'), T: simple.Node('C'), W: 7},
|
||||
{F: simple.Node('B'), T: simple.Node('D'), W: 1},
|
||||
@@ -160,7 +160,7 @@ var spanningTreeTests = []struct {
|
||||
// Nodes labelled row major.
|
||||
name: "Minimum Spanning Tree WP figure 1",
|
||||
graph: func() spanningGraph { return simple.NewWeightedUndirectedGraph(0, math.Inf(1)) },
|
||||
edges: []simple.Edge{
|
||||
edges: []simple.WeightedEdge{
|
||||
{F: simple.Node(1), T: simple.Node(2), W: 4},
|
||||
{F: simple.Node(1), T: simple.Node(3), W: 1},
|
||||
{F: simple.Node(1), T: simple.Node(4), W: 4},
|
||||
@@ -185,7 +185,7 @@ var spanningTreeTests = []struct {
|
||||
},
|
||||
|
||||
want: 38,
|
||||
treeEdges: []simple.Edge{
|
||||
treeEdges: []simple.WeightedEdge{
|
||||
{F: simple.Node(1), T: simple.Node(2), W: 4},
|
||||
{F: simple.Node(1), T: simple.Node(3), W: 1},
|
||||
{F: simple.Node(2), T: simple.Node(8), W: 7},
|
||||
@@ -203,7 +203,7 @@ var spanningTreeTests = []struct {
|
||||
// but with C--H and E--J cut.
|
||||
name: "Borůvka WP example cut",
|
||||
graph: func() spanningGraph { return simple.NewWeightedUndirectedGraph(0, math.Inf(1)) },
|
||||
edges: []simple.Edge{
|
||||
edges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('B'), W: 13},
|
||||
{F: simple.Node('A'), T: simple.Node('C'), W: 6},
|
||||
{F: simple.Node('B'), T: simple.Node('C'), W: 7},
|
||||
@@ -225,7 +225,7 @@ var spanningTreeTests = []struct {
|
||||
},
|
||||
|
||||
want: 65,
|
||||
treeEdges: []simple.Edge{
|
||||
treeEdges: []simple.WeightedEdge{
|
||||
{F: simple.Node('A'), T: simple.Node('C'), W: 6},
|
||||
{F: simple.Node('B'), T: simple.Node('C'), W: 7},
|
||||
{F: simple.Node('B'), T: simple.Node('D'), W: 1},
|
||||
|
Reference in New Issue
Block a user