Я предполагаю, что желаемой структурой графа будет HashTable<Vertex,ArrayList<Pair<Vertex,Float>>>
, сопоставляющая каждую вершину с ее смежными вместе с весом ребра.
Вы можете использовать ArrayList, так как вам не нужно удалять обработанные ребра из списка смежности.
В общем случае я бы не рекомендовал связывать HashTable со вторым из-за использования памяти, потому чтоалгоритм обрабатывает все смежные ребра вершины.Только если вы хотите удалить обработанный край, это поможет вам удалить край для другого направления.
Обратите внимание, что, хотя подход HashMap + ArrayList является эффективным с точки зрения пространства и достаточен для запуска этого алгоритма в O (V ^ 2) это не рекомендуется для плотных графов, когда требуется много поисков ребер.Проверка того, существует ли ребро от A до B, является линейной по количеству смежных вершин A или B. Если вы хотите получить их в O (1), вам нужен второй HashTable для хранения ребер.Пример приведен в JGraphT Library .
Также обратите внимание, что обычно рекомендуется использовать HashMap вместо HashTable