mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 07:06:54 +08:00
80 lines
1.3 KiB
Go
80 lines
1.3 KiB
Go
// Copyright ©2014 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 main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"gonum.org/v1/gonum/graph"
|
|
"gonum.org/v1/gonum/graph/topo"
|
|
)
|
|
|
|
func main() {
|
|
// graph G {
|
|
G := NewGraphNode(0)
|
|
// e
|
|
e := NewGraphNode(1)
|
|
|
|
// subgraph clusterA {
|
|
clusterA := NewGraphNode(2)
|
|
|
|
// a -- b
|
|
a := NewGraphNode(3)
|
|
b := NewGraphNode(4)
|
|
a.AddNeighbor(b)
|
|
b.AddNeighbor(a)
|
|
clusterA.AddRoot(a)
|
|
clusterA.AddRoot(b)
|
|
|
|
// subgraph clusterC {
|
|
clusterC := NewGraphNode(5)
|
|
// C -- D
|
|
C := NewGraphNode(6)
|
|
D := NewGraphNode(7)
|
|
C.AddNeighbor(D)
|
|
D.AddNeighbor(C)
|
|
|
|
clusterC.AddRoot(C)
|
|
clusterC.AddRoot(D)
|
|
// }
|
|
clusterA.AddRoot(clusterC)
|
|
// }
|
|
|
|
// subgraph clusterB {
|
|
clusterB := NewGraphNode(8)
|
|
|
|
// d -- f
|
|
d := NewGraphNode(9)
|
|
f := NewGraphNode(10)
|
|
d.AddNeighbor(f)
|
|
f.AddNeighbor(d)
|
|
clusterB.AddRoot(d)
|
|
clusterB.AddRoot(f)
|
|
// }
|
|
|
|
// d -- D
|
|
d.AddNeighbor(D)
|
|
D.AddNeighbor(d)
|
|
|
|
// e -- clusterB
|
|
e.AddNeighbor(clusterB)
|
|
clusterB.AddNeighbor(e)
|
|
|
|
// clusterC -- clusterB
|
|
clusterC.AddNeighbor(clusterB)
|
|
clusterB.AddNeighbor(clusterC)
|
|
|
|
G.AddRoot(e)
|
|
G.AddRoot(clusterA)
|
|
G.AddRoot(clusterB)
|
|
// }
|
|
|
|
if !topo.IsPathIn(G, []graph.Node{C, D, d, f}) {
|
|
fmt.Println("Not working!")
|
|
} else {
|
|
fmt.Println("Working!")
|
|
}
|
|
}
|