Я пытаюсь реализовать алгоритм поиска bfs по ширине в R. Я знаю о функции graph :: bfs и do_bfs из DiaGrammer. Я думаю, что моя проблема в «для» функции BFS.
На входе будет представлен график в виде следующего:
1
2 3
4 5 6 7
На выходе должен быть путь. в этом случае, если я начну с 1, 1,2,3,4,5,6,7
library (igraph)
library(foreach)
library(flifo)
library(digest)
# devtools::install_github("rdpeng/queue")
install.packages("queuecomputer")
. Эти пакеты показались полезными для реализации, особенно для очереди.
t<-make_tree(7, children = 2, mode ="out")
plot.igraph(t)
bfsg(t, 1)
bfsg<- function (g, n) {
m <- c(replicate(length(V(t)), 0))
q<-flifo::fifo ()
m[n]<- 1
push (q, n)
pr <- c(replicate(length(V(t)), 0))
}
в этот момент 1 должен быть в очереди, после этого его распечатали и вытащили из очереди. После всплытия алгоритм должен go 2 и 3
while (size(q)!=0){
print (n)
pop(q)
}
for (i in unlist(adjacent_vertices(g, n, mode = "out"))){
if (m[i] == 0){
push(q,i)
m[i]=2
}
}