Тест кейз
[TestCase(arg: new[] { "a", "b:a", "c" }, ExpectedResult = "a, c, b")] // fails
public string TopoSort(string[] source)
{ ... }
Есть подозрение, что сделан простой DFS с проверкой на циклы, так?
Это неправильно. Теряется одна из киллфич: все элементы без взаимных зависимостей должны быть расположены рядом.
Киллфича нужна для кучи интересных сценариев наподобие автоматического распараллеливания обработки.
Например, вот такой вот граф
a1 <- b1 <- c1 <- d1 <- e1
\ \
\------- c2 <------- e2
\
------------------ e3
при обходе с любого узла должен сортироваться вот так:
a1 b1 c1 d1 e1
c2 e2
e3
(внутри каждого столбца порядок элементов произвольный)
Ну и элементы надо отдавать массивами (каждый слой — отдельный массив), а не простой последовательностью.
Доп. ссылки:
http://stackoverflow.com/questions/4073119/topological-sort-with-grouping
https://habrahabr.ru/post/66766/