-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnew.go
52 lines (50 loc) · 1.21 KB
/
new.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package graph
//func AutoFromAdjMatrix(matrix AdjacencyMatrix) Abstract {
// var res Abstract
// var weighted bool
// for i := 0; i < len(matrix.matrix[0]); i++ {
// for j := i + 1; j < len(matrix.matrix[0]); j++ {
// if matrix.matrix[i][j] != 0 {
// if matrix.matrix[i][j] != 1 {
// weighted = true
// }
// res.Graph[strconv.Itoa(i)][strconv.Itoa(j)] = matrix.matrix[i][j]
// }
// }
// }
// if !weighted {
// return ConvWeightedToUnweighted(&res)
// }
// return res
//}
func New[T comparable](graph map[T]map[T]int) *AbstractGraph[T] {
output := make(map[*Node[T]]map[*Node[T]]int, len(graph))
vertexes := make([]*Node[T], len(graph))
g := &AbstractGraph[T]{Graph: output}
i := 0
for vert := range graph {
n := &Node[T]{Name: vert, Mark: 0, Power: len(graph[vert])}
vertexes[i] = n
i++
}
for vert, list := range graph {
var parentNode *Node[T]
childList := make(map[*Node[T]]int, len(list))
for _, v := range vertexes {
if v.Name == vert {
parentNode = v
g.Graph[v] = childList
break
}
}
for vertex, weight := range list {
for _, n := range vertexes {
if n.Name == vertex {
childList[n] = weight
}
}
}
g.Graph[parentNode] = childList
}
return g
}