Как найти все пути в графе между двумя вершинами, используя поиск в глубину в R
Хотелось бы понять, как с помощью такого поиска в глубину найти ВСЕ пути в графе между заданными вершинами. Этот код находит 1 путь, а как потом вернуться, например, на шаг назад и попытаться поискать другие пути? На вход идет матрица смежности
f <- function(x,y,g,visit = c()){
visit <- c(visit,x)
smez <- which(g[x,] != 0)
if(x == y){
return(x)
}else{
path <- c()
for(i in smez){
if(sum(visit == i) == 0){
path <- f(i,y,g,visit)
if(length(path) > 0){
path <- c(x, path)
return(path)
}
}
}
}
return(path)
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Для вывода всех (простых) путей можно использовать чуть-чуть модифицированный поиск в глубину (или в ширину).
Отличие только в том, что пометки пройденных вершин должны быть не глобальными, а локальными для каждой ветви рекурсии.
Этого можно добиться, передавая новый экземпляр пометок (visit?) в рекурсивный вызов, либо работать с одним экземпляром, но очищать текущую пометку после рекурсивного вызова.