Awesome Go

gograph

CategoryScience and Data Analysis
SubcategoryScience and Data Analysis
Stars0

A golang generic graph library that provides mathematical graph-theory and algorithms

About gograph

build Go Report Card codecov Go Reference Mentioned in Awesome Go

GoGraph

Table of Contents

Install

Use go get command to get the latest version of the gograph:

go get github.com/hmdsefi/gograph

Then you can use import the gograph to your code:

package main

import "github.com/hmdsefi/gograph"

How to Use

Graph

gograph contains the Graph[T comparable] interface that provides all needed APIs to manage a graph. All the supported graph types in gograph library implemented this interface.

type Graph[T comparable] interface {
GraphType

AddEdge(from, to *Vertex[T], options ...EdgeOptionFunc) (*Edge[T], error)
GetAllEdges(from, to *Vertex[T]) []*Edge[T]
GetEdge(from, to *Vertex[T]) *Edge[T]
EdgesOf(v *Vertex[T]) []*Edge[T]
RemoveEdges(edges ...*Edge[T])
AddVertexByLabel(label T, options ...VertexOptionFunc) *Vertex[T]
AddVertex(v *Vertex[T])
GetVertexByID(label T) *Vertex[T]
GetAllVerticesByID(label ...T) []*Vertex[T]
GetAllVertices() []*Vertex[T]
RemoveVertices(vertices ...*Vertex[T])
ContainsEdge(from, to *Vertex[T]) bool
ContainsVertex(v *Vertex[T]) bool
}

The generic type of the T in Graph interface represents the vertex label. The type of T should be comparable. You cannot use slices and function types for T.

Directed

directed-graph

graph := New[int](gograph.Directed())

graph.AddEdge(gograph.NewVertex(1), gograph.NewVertex(2))
graph.AddEdge(gograph.NewVertex(1), gograph.NewVertex(3))
graph.AddEdge(gograph.NewVertex(2), gograph.NewVertex(2))
graph.AddEdge(gograph.NewVertex(3), gograph.NewVertex(4))
graph.AddEdge(gograph.NewVertex(4), gograph.NewVertex(5))
graph.AddEdge(gograph.NewVertex(5), gograph.NewVertex(6))

Acyclic

acyclic-graph

graph := New[int](gograph.Acyclic())

graph.AddEdge(gograph.NewVertex(1), gograph.NewVertex(2))
graph.AddEdge(gograph.NewVertex(2), gograph.NewVertex(3))
_, err := graph.AddEdge(gograph.NewVertex(3), gograph.NewVertex(1))
if err != nil {
// do something
}

Undirected

undirected-graph

// by default graph is undirected
graph := New[string]()

graph.AddEdge(gograph.NewVertex("A"), gograph.NewVertex("B"))
graph.AddEdge(gograph.NewVertex("A"), gograph.NewVertex("D"))
graph.AddEdge(gograph.NewVertex("B"), gograph.NewVertex("C"))
graph.AddEdge(gograph.NewVertex("B"), gograph.NewVertex("D"))

Weighted

weighted-edge

graph := New[string]()

vA := gograph.AddVertexByLabel("A")
vB := gograph.AddVertexByLabel("B")
vC := gograph.AddVertexByLabel("C")
vD := gograph.AddVertexByLabel("D")

graph.AddEdge(vA, vB, gograph.WithEdgeWeight(4))
graph.AddEdge(vA, vD, gograph.WithEdgeWeight(3))
graph.AddEdge(vB, vC, gograph.WithEdgeWeight(3))
graph.AddEdge(vB, vD, gograph.WithEdgeWeight(1))
graph.AddEdge(vC, vD, gograph.WithEdgeWeight(2))

weighted-vertex

graph := New[string]()
vA := gograph.AddVertexByLabel("A", gograph.WithVertexWeight(3))
vB := gograph.AddVertexByLabel("B", gograph.WithVertexWeight(2))
vC := gograph.AddVertexByLabel("C", gograph.WithVertexWeight(4))

graph.AddEdge(vA, vB)
graph.AddEdge(vB, vC)

Traverse

Traverse package provides the iterator interface that guarantees all the algorithm export the same APIs:

type Iterator[T comparable] interface {
	HasNext() bool
	Next() *gograph.Vertex[T]
	Iterate(func(v *gograph.Vertex[T]) error) error
	Reset()
}

This package contains the following iterators:

License

Apache License, please see LICENSE for details.

Frequently Asked Questions

What is gograph?

gograph is a Science and Data Analysis library for the Go programming language. A golang generic graph library that provides mathematical graph-theory and algorithms

How do I install gograph?

Install gograph with the Go module system using `go get hmdsefi/gograph`. Check the repository for the current installation instructions.

What category does gograph belong to?

gograph is listed under Science and Data Analysis, specifically Science and Data Analysis.

← Back to Science and Data Analysis