Skip to content

Instantly share code, notes, and snippets.

type Number interface {
Plus(Number) Number
}
func Add(a, b Number) Number {
return a.Plus(b)
}
@sausheong
sausheong / func1.go
Created May 15, 2022 15:29
generics
func AddInt(a, b int) int {
return a + b
}
func AddFloat(a, b float64) float64 {
return a + b
}
unc main() {
graph := buildGraph()
fmt.Println("GRAPH\n-----")
nodes := sortNodes(graph.Nodes)
for _, node := range nodes {
fmt.Printf("%s -> %v\n", node.name, graph.Edges[node.name])
}
fmt.Println()
bMST := boruvka(graph)
package main
import (
"testing"
)
func BenchmarkBoruvka(b *testing.B) {
graph := buildGraph()
b.ResetTimer()
for i := 0; i < b.N; i++ {
boruvka(graph)
func main() {
graph := buildGraph()
fmt.Println("GRAPH\n-----")
nodes := sortNodes(graph.Nodes)
for _, node := range nodes {
fmt.Printf("%s -> %v\n", node.name, graph.Edges[node.name])
}
fmt.Println()
bMST := boruvka(graph)
func (g *Graph) HasNode(name string) (yes bool) {
for _, n := range g.Nodes {
if n.name == name {
yes = true
}
}
return
}
func prim(graph *Graph, nodeName string) (mst *Graph) {
mst = NewGraph()
h := &Heap{}
heap.Init(h)
startNode := graph.GetNode(nodeName)
mst.AddNode(startNode)
for _, edge := range graph.Edges[startNode.name] {
heap.Push(h, NodePair{startNode, edge})
}
type Stack struct {
nodes [][2]*Node
}
func (s *Stack) Push(n [2]*Node) {
s.nodes = append(s.nodes, n)
}
func (s *Stack) Pop() (n [2]*Node) {
n = s.nodes[len(s.nodes)-1]
func (g *Graph) isCyclic(name string) (yes bool) {
stack := &Stack{}
visited := make(map[string]bool)
startNode := g.GetNode(name)
// use a 2 node array with first node as the from node and the second as the to node
stack.Push([2]*Node{startNode, startNode})
for len(stack.nodes) > 0 {
n := stack.Pop()
// if it's not visited before
func (g *Graph) RemoveEdge(n1, n2 string) {
rmEdge(g, n1, n2)
rmEdge(g, n2, n1)
}
func rmEdge(g *Graph, m, n string) {
edges := g.Edges[m]
r := -1
for i, edge := range edges {
if edge.node.name == n {