graph-builder

Форк
0
/
helpers.go 
64 строки · 1.4 Кб
1
package graph
2

3
import (
4
	"math"
5
	"math/rand"
6
	"time"
7
)
8

9
func (g *AbstractGraph[T]) GetAdjacentVertices(n *Node[T]) []*Node[T] {
10
	keys := make([]*Node[T], len(g.Graph[n]))
11
	i := 0
12
	for k := range g.Graph[n] {
13
		keys[i] = k
14
		i++
15
	}
16

17
	return keys
18
}
19

20
// randomColorsInRGB - заполняет слайс предоставленной длины случайным цветом в формате RGB
21
func randomColorsInRGB(len int) [][]int {
22
	var colors = make([][]int, len)
23
	for i := 0; i < len; i++ {
24
		colors[i] = make([]int, 3)
25
	}
26
	rand.Seed(time.Now().UnixNano())
27
	for i := 0; i < len; i++ {
28
		for j := range colors[i] {
29
			colors[i][j] = rand.Intn(255)
30
		}
31
	}
32
	return colors
33
}
34

35
// checkIfIn - проверяет, есть ли данная вершина в списке смежных
36
func checkIfIn[T comparable](list map[*Node[T]]int, node *Node[T]) bool {
37
	for vert := range list {
38
		if node.Name == vert.Name {
39
			return true
40
		}
41
	}
42
	return false
43
}
44

45
func findMinimalCostNode[T comparable](list map[*Node[T]]int, processed []*Node[T]) *Node[T] {
46
	var minimal *Node[T]
47
	minWeight := math.MaxInt
48
	for vert, weight := range list {
49
		if weight < minWeight && !contains(processed, vert) {
50
			minWeight = weight
51
			minimal = vert
52
		}
53
	}
54
	return minimal
55
}
56

57
func contains[T comparable](list []*Node[T], el *Node[T]) bool {
58
	for _, node := range list {
59
		if el == node {
60
			return true
61
		}
62
	}
63
	return false
64
}
65

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.