mirror of
https://github.com/gonum/gonum.git
synced 2025-10-06 15:47:01 +08:00
221 lines
3.6 KiB
Go
221 lines
3.6 KiB
Go
// Copyright ©2021 The Gonum Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gen_test
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"gonum.org/v1/gonum/graph"
|
|
"gonum.org/v1/gonum/graph/encoding/dot"
|
|
"gonum.org/v1/gonum/graph/graphs/gen"
|
|
"gonum.org/v1/gonum/graph/simple"
|
|
)
|
|
|
|
func ExampleStar_undirectedRange() {
|
|
dst := simple.NewUndirectedGraph()
|
|
err := gen.Star(dst, 0, gen.IDRange{First: 1, Last: 6})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
b, err := dot.Marshal(dst, "star", "", "\t")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("%s\n", b)
|
|
|
|
// Output:
|
|
// strict graph star {
|
|
// // Node definitions.
|
|
// 0;
|
|
// 1;
|
|
// 2;
|
|
// 3;
|
|
// 4;
|
|
// 5;
|
|
// 6;
|
|
//
|
|
// // Edge definitions.
|
|
// 0 -- 1;
|
|
// 0 -- 2;
|
|
// 0 -- 3;
|
|
// 0 -- 4;
|
|
// 0 -- 5;
|
|
// 0 -- 6;
|
|
// }
|
|
}
|
|
|
|
func ExampleWheel_directedRange() {
|
|
dst := simple.NewDirectedGraph()
|
|
err := gen.Wheel(dst, 0, gen.IDRange{First: 1, Last: 6})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
b, err := dot.Marshal(dst, "wheel", "", "\t")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("%s\n", b)
|
|
|
|
// Output:
|
|
// strict digraph wheel {
|
|
// // Node definitions.
|
|
// 0;
|
|
// 1;
|
|
// 2;
|
|
// 3;
|
|
// 4;
|
|
// 5;
|
|
// 6;
|
|
//
|
|
// // Edge definitions.
|
|
// 0 -> 1;
|
|
// 0 -> 2;
|
|
// 0 -> 3;
|
|
// 0 -> 4;
|
|
// 0 -> 5;
|
|
// 0 -> 6;
|
|
// 1 -> 2;
|
|
// 2 -> 3;
|
|
// 3 -> 4;
|
|
// 4 -> 5;
|
|
// 5 -> 6;
|
|
// 6 -> 1;
|
|
// }
|
|
}
|
|
|
|
func ExamplePath_directedSet() {
|
|
dst := simple.NewDirectedGraph()
|
|
err := gen.Path(dst, gen.IDSet{2, 4, 5, 9})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
b, err := dot.Marshal(dst, "path", "", "\t")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("%s\n", b)
|
|
|
|
// Output:
|
|
// strict digraph path {
|
|
// // Node definitions.
|
|
// 2;
|
|
// 4;
|
|
// 5;
|
|
// 9;
|
|
//
|
|
// // Edge definitions.
|
|
// 2 -> 4;
|
|
// 4 -> 5;
|
|
// 5 -> 9;
|
|
// }
|
|
}
|
|
|
|
func ExampleComplete_directedSet() {
|
|
dst := simple.NewDirectedGraph()
|
|
err := gen.Complete(dst, gen.IDSet{2, 4, 5, 9})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
b, err := dot.Marshal(dst, "complete", "", "\t")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("%s\n", b)
|
|
|
|
// Output:
|
|
// strict digraph complete {
|
|
// // Node definitions.
|
|
// 2;
|
|
// 4;
|
|
// 5;
|
|
// 9;
|
|
//
|
|
// // Edge definitions.
|
|
// 2 -> 4;
|
|
// 2 -> 5;
|
|
// 2 -> 9;
|
|
// 4 -> 5;
|
|
// 4 -> 9;
|
|
// 5 -> 9;
|
|
// }
|
|
}
|
|
|
|
// Bidirected allows bidirectional directed graph construction.
|
|
type Bidirected struct {
|
|
*simple.DirectedGraph
|
|
}
|
|
|
|
func (g Bidirected) SetEdge(e graph.Edge) {
|
|
g.DirectedGraph.SetEdge(e)
|
|
g.DirectedGraph.SetEdge(e.ReversedEdge())
|
|
}
|
|
|
|
func ExampleComplete_biDirectedSet() {
|
|
dst := simple.NewDirectedGraph()
|
|
err := gen.Complete(Bidirected{dst}, gen.IDSet{2, 4, 5, 9})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
b, err := dot.Marshal(dst, "complete", "", "\t")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("%s\n", b)
|
|
|
|
// Output:
|
|
// strict digraph complete {
|
|
// // Node definitions.
|
|
// 2;
|
|
// 4;
|
|
// 5;
|
|
// 9;
|
|
//
|
|
// // Edge definitions.
|
|
// 2 -> 4;
|
|
// 2 -> 5;
|
|
// 2 -> 9;
|
|
// 4 -> 2;
|
|
// 4 -> 5;
|
|
// 4 -> 9;
|
|
// 5 -> 2;
|
|
// 5 -> 4;
|
|
// 5 -> 9;
|
|
// 9 -> 2;
|
|
// 9 -> 4;
|
|
// 9 -> 5;
|
|
// }
|
|
}
|
|
|
|
func ExampleComplete_undirectedSet() {
|
|
dst := simple.NewUndirectedGraph()
|
|
err := gen.Complete(dst, gen.IDSet{2, 4, 5, 9})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
b, err := dot.Marshal(dst, "complete", "", "\t")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("%s\n", b)
|
|
|
|
// Output:
|
|
// strict graph complete {
|
|
// // Node definitions.
|
|
// 2;
|
|
// 4;
|
|
// 5;
|
|
// 9;
|
|
//
|
|
// // Edge definitions.
|
|
// 2 -- 4;
|
|
// 2 -- 5;
|
|
// 2 -- 9;
|
|
// 4 -- 5;
|
|
// 4 -- 9;
|
|
// 5 -- 9;
|
|
// }
|
|
}
|