Используйте Сканер для анализа данных файла. Для каждого кортежа, если исходная вершина не была создана, создайте ее, в противном случае найдите ее в существующем графе - создайте функцию поиска. Сделайте то же самое для целевой вершины. Затем создайте ребро с весом, равным третьему токену в кортеже, и добавьте целевую вершину к ребру. Наконец, добавьте ребро в список смежности исходной вершины.
Для ранее упомянутой функции поиска вы можете реализовать что-то, что может искать в каждой вершине графа, начиная с любой вершины. Рекурсия будет необходима.
public static Vertex search(Vertex src, String name);
Более простое решение - сохранить список всех вершин, которые вы создаете при построении графа, и искать по нему.
public static Vertex search(List<Vertex> vertices, String name);
Когда вы закончили построение графа и у вас есть имя вершины, с которой начнется алгоритм Дейкстры, вы можете использовать функцию поиска, чтобы получить ссылку на вершину.
Dijkstra.computePath(search(vertices, startVertexName));
И это все. Вот пример того, как анализировать данные вашего файла:
List<Vertex> vertices = new ArrayList<Vertex>();
String src =
"Pittsburgh Philadelphia 323 "+
"Pittsburgh Ohio 125 "+
"Ohio Philadelphia 400 "+
"-1 Ohio";
//new Scanner(new File(fileName));
Scanner scnr = new Scanner(src);
String src, target;
int weight;
while(scnr.hasNext())
{
src = scnr.next();
if(src.equals("-1"))
break;
else {
target = scnr.next();
weight = scnr.nextInt();
}
//call search(), implement logic in addToGraph()
addVertexToGraph(src, target, weight, vertices);
}
String startVertexName = scnr.next();
scnr.close();
Обратите внимание, что Scanner.next возвращает следующий токен, разделенный пробелом (разделитель по умолчанию), поэтому данные вашего файла должны быть отформатированы таким образом.