Первое, что вы должны сделать, это определить class
для вашего graph
node
, и вместо того, чтобы поддерживать map
для соединений, пусть каждый узел ведет список своих соединений. Таким образом, ваш code
будет выглядеть следующим образом
class Graph<T>(connectionProb: Double) {
var nextId = 0
val nodes = mutableListOf<Node<T>>()
// Define a node class, so if you have graph of Integer then you want a node of Integer
class Node<T>(var id: Int){
val connections = mutableListOf<Node<T>>()
fun addConnection(newConnection: Node<T>){
connections.add(newConnection)
}
override fun toString() = "$id"
/** add other functions, such as remove etc */
}
fun createNode(){
var newNode = Node<T>(nextId++)
nodes.add(newNode)
}
}
Теперь, чтобы использовать это graph
, вы будете выполнять followig
fun main(){
var myGraph = Graph<Integer>(10.9)
myGraph.createNode()
myGraph.createNode()
myGraph.nodes[0].addConnection(myGraph.nodes[1])
/* Print all nodes in graph */
for(node in myGraph.nodes) print(" $node")
/* Print connections of first node */
for(node in myGraph.nodes[0].connections) print("\n\nConnection id: $node")
}
Обратите внимание, что это будет дать вам общее представление о том, как go реализовать реализацию графа, и есть много вещей, которые вы можете улучшить в реализации. Чтобы узнать больше, я предлагаю вам прочитать хорошую книгу, такую как Структуры данных и алгоритмы в Java