Ваш вопрос не соответствует названию - вы после создания графика не MST? Если у вас есть график, как говорит @ user20650, само MST становится простым.
Создать график размером n очень просто, но существует множество сложностей, связанных с тем, какие узлы связаны, и их весами (расстояниями), о которых вы нам не говорите. , так что это действительно базовая c иллюстрация.
Если предположить, что все узлы связаны со всеми другими узлами (полный график), мы можем использовать make_full_graph
. Если это не так, вам нужны данные, чтобы сказать, какие узлы подключены, или использовать случайный график.
# create graph
n <- 5
g <- make_full_graph(n)
Следующая проблема - расстояния. Вы не предоставили нам никакой информации о том, как распределяются эти расстояния, но мы можем продемонстрировать, как они распределяются по графику. Здесь я просто использую случайные равномерные [0-1] числа:
# number of edges in an (undirected) full graph is (n2 - n) /2 but
# it is easier to just ask the graph how many edges it has - this
# is more portable if you change from make_full_graph
n_edge <- gsize(g)
g <- set_edge_attr(g, 'weight', value=runif(n_edge))
plot(g)
Следующий бит - это просто само MST, используя minimum.spanning.tree
:
mst <- minimum.spanning.tree(g)
Выход mst
выглядит следующим образом:
IGRAPH dc21276 U-W- 5 4 -- Full graph
+ attr: name (g/c), loops (g/l), weight (e/n)
+ edges from dc21276:
[1] 1--4 1--5 2--3 2--5