graph-builder

Форк
0
/
new.go 
52 строки · 1.2 Кб
1
package graph
2

3
//func AutoFromAdjMatrix(matrix AdjacencyMatrix) Abstract {
4
//	var res Abstract
5
//	var weighted bool
6
//	for i := 0; i < len(matrix.matrix[0]); i++ {
7
//		for j := i + 1; j < len(matrix.matrix[0]); j++ {
8
//			if matrix.matrix[i][j] != 0 {
9
//				if matrix.matrix[i][j] != 1 {
10
//					weighted = true
11
//				}
12
//				res.Graph[strconv.Itoa(i)][strconv.Itoa(j)] = matrix.matrix[i][j]
13
//			}
14
//		}
15
//	}
16
//	if !weighted {
17
//		return ConvWeightedToUnweighted(&res)
18
//	}
19
//	return res
20
//}
21

22
func New[T comparable](graph map[T]map[T]int) *AbstractGraph[T] {
23
	output := make(map[*Node[T]]map[*Node[T]]int, len(graph))
24
	vertexes := make([]*Node[T], len(graph))
25
	g := &AbstractGraph[T]{Graph: output}
26
	i := 0
27
	for vert := range graph {
28
		n := &Node[T]{Name: vert, Mark: 0, Power: len(graph[vert])}
29
		vertexes[i] = n
30
		i++
31
	}
32
	for vert, list := range graph {
33
		var parentNode *Node[T]
34
		childList := make(map[*Node[T]]int, len(list))
35
		for _, v := range vertexes {
36
			if v.Name == vert {
37
				parentNode = v
38
				g.Graph[v] = childList
39
				break
40
			}
41
		}
42
		for vertex, weight := range list {
43
			for _, n := range vertexes {
44
				if n.Name == vertex {
45
					childList[n] = weight
46
				}
47
			}
48
		}
49
		g.Graph[parentNode] = childList
50
	}
51
	return g
52
}
53

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

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

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

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