Я оставлю чтение файла вам, так как есть много способов сделать это в зависимости от вашего конкретного приложения. Здесь - один из источников, который может вам пригодиться.
Предполагая, что вам удалось прочитать файл в Array[(Int, Int)]
, т. Е. В массив кортежей, в вашем примере Array((3,5), (4,6), (7,8))
, мы можем превратить его в карту смежности , которую вы ищу следующим образом:
arr.groupBy(_._1).mapValues(arr => arr.map(_._2))
Пояснение:
Сначала мы сгруппируем кортежи по первому элементу (._1
). Это создает Map[Int, Array[(Int, Int)]]
, представляющий карту от каждой вершины до всех ее ребер.
Далее, поскольку мы преобразуем массивы, чтобы они не содержали полную информацию о ребре (u,v)
, а только соседнюю вершину v
, соответствующую этому ребру.
И мы закончили!
NB. Предполагается, что ваш график направлен. Если вы хотите превратить его в неориентированный граф, вы можете сделать это, просто добавив (v,u)
для каждого (u,v)
.