package main type ( AdjacencyMatrix map[int]map[int]int Graph struct { X map[int]Vector E []map[int]Vector L map[int]int A AdjacencyMatrix } ) func (A AdjacencyMatrix) Modify(u, v, w int) { if A[u] == nil { A[u] = make(map[int]int) } A[u][v] = w } func MakeGraph() Graph { G := Graph{ make(map[int]Vector), make([]map[int]Vector, 3), make(map[int]int), make(AdjacencyMatrix), } for i := 0; i < 3; i++ { G.E[i] = make(map[int]Vector) } return G } func (G Graph) AddNode(u int, V Vector, l int) { G.X[u] = V G.L[u] = l } func (G Graph) AddEdge(u, v int) { G.A.Modify(u, v, 1) G.A.Modify(v, u, -1) }