heretic_man
@heretic_man

Как в проходе графа DFS создать массив маршурутов до нужной вершины?

Сам алгоритм написан на го:
type Graph struct {
	Vertices map[int]*Vertex
	directed bool
}

type Vertex struct {
	Key int
	Vertices map[int]*Vertex
}

func DFS(g *Graph,  startVertex *Vertex) {
	visited := map[int]bool{}

	if startVertex == nil {
		return
	}
	visited[startVertex.Key] = true
	
	for _, v := range startVertex.Vertices {
		if visited[v.Key] {
			continue
		}
		DFS(g, v)
	}
}


Сообственно вопрос в заголовке. ЯП не важен хотел бы понять суть. Нужно создать массив успешно пройденных сегментов до нужной вершины.

Например, нужно найти все маршруты от A до F
граф:
A ---- B ----- C
|  \   |
D ---- F


Результат:
{
  "0": ["a",  "f"],
  "1": ["a", "b", "f"],
  "2": ["a",  "d", "f"]
}
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Это вам полный перебор нужен.

При выходе из функции очищайте пометку visited. При входе добавляйте вершину в массив/стек/список. Там будет храниться пройденный путь. При выходе из функции - убирайте последнюю вершину из пути. Если зашли в конечную вершину - выводите этот стек с вершинами.

Еще проблемы - visited и массив пути должны быть одни на все рекурсивные вызовы. Или они должны быть глобальными или передавайте их по ссылке рекурсивно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы