Если вы храните график в виде списка смежности («Этот узел указывает на эти узлы»), то вы можете просто перебрать список смежности и поменять местами пары A -> B на B -> A, создавсписок обратной смежности («На этот узел указывают эти узлы»).
Подробнее в этой статье .
РЕДАКТИРОВАТЬ:
На вашей диаграмме список смежности будет:
A -> [B, C]
B -> [D]
C -> [D]
D -> []
Это может быть представлено как Map<Node, Collection<Node>>
.Напишите метод, который берет пару и обновляет карту, назовите ее connect
.Чтобы построить структуру, вы бы назвали ее с помощью connect(A, B)
, connect(A, C)
, connect(B, D)
, connect(C, D)
.
Чтобы инвертировать ее, создайте новую карту для хранения перевернутой структуры.Выполните итерацию по каждому ключу на карте, а затем по каждому значению в списке и вызовите connect
в инвертированной структуре с обратными аргументами.