🎨 Cleanups

This commit is contained in:
Ettore Di Giacinto
2022-06-06 11:45:05 +02:00
parent 45a28112ef
commit 288ac086ec
10 changed files with 136 additions and 29 deletions

View File

@@ -1,5 +1,7 @@
package toposort
import "sort"
type Graph struct {
nodes []string
outputs map[string]map[string]int
@@ -59,7 +61,7 @@ func (g *Graph) RemoveEdge(from, to string) bool {
return true
}
func (g *Graph) Toposort() ([]string, bool) {
func (g *Graph) toposort(stable bool) ([]string, bool) {
L := make([]string, 0, len(g.nodes))
S := make([]string, 0, len(g.nodes))
@@ -69,6 +71,10 @@ func (g *Graph) Toposort() ([]string, bool) {
}
}
if stable {
sort.Strings(S)
}
for len(S) > 0 {
var n string
n, S = S[0], S[1:]
@@ -79,6 +85,10 @@ func (g *Graph) Toposort() ([]string, bool) {
ms[i-1] = m
}
if stable {
sort.Strings(ms)
}
for _, m := range ms {
g.unsafeRemoveEdge(n, m)
@@ -99,3 +109,11 @@ func (g *Graph) Toposort() ([]string, bool) {
return L, true
}
func (g *Graph) Toposort() ([]string, bool) {
return g.toposort(false)
}
func (g *Graph) ToposortStable() ([]string, bool) {
return g.toposort(true)
}