graph-builder
/
helpers.go
64 строки · 1.4 Кб
1package graph
2
3import (
4"math"
5"math/rand"
6"time"
7)
8
9func (g *AbstractGraph[T]) GetAdjacentVertices(n *Node[T]) []*Node[T] {
10keys := make([]*Node[T], len(g.Graph[n]))
11i := 0
12for k := range g.Graph[n] {
13keys[i] = k
14i++
15}
16
17return keys
18}
19
20// randomColorsInRGB - заполняет слайс предоставленной длины случайным цветом в формате RGB
21func randomColorsInRGB(len int) [][]int {
22var colors = make([][]int, len)
23for i := 0; i < len; i++ {
24colors[i] = make([]int, 3)
25}
26rand.Seed(time.Now().UnixNano())
27for i := 0; i < len; i++ {
28for j := range colors[i] {
29colors[i][j] = rand.Intn(255)
30}
31}
32return colors
33}
34
35// checkIfIn - проверяет, есть ли данная вершина в списке смежных
36func checkIfIn[T comparable](list map[*Node[T]]int, node *Node[T]) bool {
37for vert := range list {
38if node.Name == vert.Name {
39return true
40}
41}
42return false
43}
44
45func findMinimalCostNode[T comparable](list map[*Node[T]]int, processed []*Node[T]) *Node[T] {
46var minimal *Node[T]
47minWeight := math.MaxInt
48for vert, weight := range list {
49if weight < minWeight && !contains(processed, vert) {
50minWeight = weight
51minimal = vert
52}
53}
54return minimal
55}
56
57func contains[T comparable](list []*Node[T], el *Node[T]) bool {
58for _, node := range list {
59if el == node {
60return true
61}
62}
63return false
64}
65