Ненаправленный график постепенно удаляет все точки, но не создает 2 графика

Города связаны телефонными проводами и сообщаются. Я хочу разрушить все города, но не тревожить еще один слишком рано, поэтому я отсоединяю провод перед разрушением города. Я не хочу отключать город от того, что используется как мост между двумя городами.

Если не ошибаюсь, это неориентированный граф. Но я не понимаю, как я могу проверить, какие города я могу удалить, а какие нет. Я посмотрел на алгоритм Тарьяна, но не понял.

Это тестовый ввод:

15 19 <- Number of cities and number of connections
1 2 <- Start of connections list
2 3
2 4
2 5
5 6
5 7
7 8
8 9
5 9
1 9
10 11
1 11
11 12
12 13
13 14
1 14
9 14
13 15
9 15

Вывод может быть таким:

10 12 6 3 14 11 4 13 15 8 9 7 5 2 1

person Community    schedule 23.03.2017    source источник
comment
Я так понимаю, проблема в удалении ребер (проводов) и узлов (городов); удалить узел можно только в том случае, если он отключен от всех других узлов. Это правильно?   -  person Codor    schedule 23.03.2017
comment
Да, я думаю, вы правильно сказали. Я могу предоставить полное задание, но оно на чешском языке. единственное правило - НЕ удалять город, похожий на мост между двумя другими (только если есть другие пути)   -  person    schedule 23.03.2017
comment
Будет ли целесообразной стратегией выбрать произвольный узел, удалить все смежные с ним ребра и, наконец, удалить узел?   -  person Codor    schedule 23.03.2017
comment
мои навыки программирования недостаточно хороши, чтобы даже визуализировать график в программе. Я вижу это только как точки и провода на бумаге, но я не знаю, как сделать это программно   -  person    schedule 23.03.2017
comment
@Condor Нет, ребра не удаляются вообще. Ограничение состоит в том, что удаление вершины не должно увеличивать количество связанных компонентов.   -  person Abstraction    schedule 24.03.2017
comment
Проблема решена, могу отправить исходник   -  person    schedule 24.03.2017


Ответы (1)


Думаю, я решил это. Просто нужно сделать алгоритм DFS. После этого результата мне нужен обратный вывод DFS.

Например, если вывод DFS равен 3,5,4,1,2, результат будет 2,1,4,5,3

Это DFS для C #: http://www.koderdojo.com/blog/depth-first-search-algorithm-in-csharp-and-net-core

person Community    schedule 23.03.2017