graph-builder
/
new.go
52 строки · 1.2 Кб
1package graph2
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
22func New[T comparable](graph map[T]map[T]int) *AbstractGraph[T] {23output := make(map[*Node[T]]map[*Node[T]]int, len(graph))24vertexes := make([]*Node[T], len(graph))25g := &AbstractGraph[T]{Graph: output}26i := 027for vert := range graph {28n := &Node[T]{Name: vert, Mark: 0, Power: len(graph[vert])}29vertexes[i] = n30i++31}32for vert, list := range graph {33var parentNode *Node[T]34childList := make(map[*Node[T]]int, len(list))35for _, v := range vertexes {36if v.Name == vert {37parentNode = v38g.Graph[v] = childList39break40}41}42for vertex, weight := range list {43for _, n := range vertexes {44if n.Name == vertex {45childList[n] = weight46}47}48}49g.Graph[parentNode] = childList50}51return g52}
53