Кратчайший путь стоимости Java: неинформированный / информированный поиск из текстового файла (.txt) - PullRequest
1 голос
/ 23 февраля 2012

Я работаю над неинформированным поисковым заданием, но застрял.

http://i.stack.imgur.com/d4n18.png

У меня 90% работает, но я пытаюсь:

1) Загрузить данные (города и мили) из файла .txtа не изнутри кода.2) Разрешить программе принимать три входных аргумента командной строки: имя файла ввода, город происхождения и город назначения

Пример: findroute inputFilename originCity DestinationCity

Пример командной строки: findroute input1.txtМюнхен, Берлин

Это часть кода, который у меня сейчас есть:

    package graph;
   import java.util.Formatter;
   import java.util.List;
   import bisearch.UniformCostSearch;
   import search.Action;

public class findRoute {
   /**
    * finds the shortest path 
    */




      public static void main(final String[] args) {
           Graph graph = findRoute.Map();

           GraphStateSpaceSearchProblem sssp = new GraphStateSpaceSearchProblem(
              graph, " Zerind ", " Oradea ");

          bisearch.Search bisearch = new UniformCostSearch();
          List<Action> actions = bisearch.search(sssp);
  findRoute.printOutput(bisearch.nodesExplored(), actions);





   }


   /**
    * prints the path found
    */
   private static void printOutput(final int nodesExplored,
         final List<Action> actions) {


      double cost = 0;
      for (final Action action : actions)

     cost += action.cost();
      System.out.println("Distance: " + new Formatter().format("%.2f", cost)+" m");
      System.out.println ("Route: ");

      for (final Action action : actions)

         System.out.println(action);

   }



   /**
    * creates a map of as a Graph

    */


   private static Graph Map() {
      final Graph graph = new Graph();

      graph.addUndirectedEdge("Oradea", "Zerind", 71);
      graph.addUndirectedEdge("Zerind", "Arad", 75);
      graph.addUndirectedEdge("Arad", "Sibiu", 140);
      graph.addUndirectedEdge("Sibiu", "Oradea", 151);
      graph.addUndirectedEdge("Timisoara", "Arad", 118);
      graph.addUndirectedEdge("Timisoara", "Lugoj", 111);
      graph.addUndirectedEdge("Lugoj", "Mehadia", 70);
      graph.addUndirectedEdge("Mehadia", "Dobreta", 75);
      graph.addUndirectedEdge("Dobreta", "Craiova", 120);
      graph.addUndirectedEdge("Sibiu", "Fagaras", 99);
      graph.addUndirectedEdge("Fagaras", "Bucharest", 211);
      graph.addUndirectedEdge("Sibiu", "Rimnicu Vilcea", 80);
      graph.addUndirectedEdge("Pitesti", "Rimnicu Vilcea", 97);
      graph.addUndirectedEdge("Craiova", "Rimnicu Vilcea", 146);
      graph.addUndirectedEdge("Craiova", "Pitesti", 136);
      graph.addUndirectedEdge("Pitesti", "Bucharest", 101);
      graph.addUndirectedEdge("Bucharest", "Giurgiu", 90);
      graph.addUndirectedEdge("Bucharest", "Urziceni", 85);
      graph.addUndirectedEdge("Urziceni", "Hirsova", 98);
      graph.addUndirectedEdge("Hirsova", "Eforie", 86);
      graph.addUndirectedEdge("Urziceni", "Vaslui", 142);
      graph.addUndirectedEdge("Vaslui", "Iasi", 92);
      graph.addUndirectedEdge("Neamt", "Iasi", 87);
      return graph;


}

}

Я просто не могу понять, как это сделать.Любая помощь будет принята с благодарностью.Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 23 февраля 2012

Вам нужно использовать args []. Параметры командной строки передаются Java-программе в виде массива через переменную args [].

args[0] = inputFilename
args[1] = originCity 
args[2] = DestinationCity

Заполните карту, анализируя файл. Остальная часть кода должна работать как есть.

0 голосов
/ 23 февраля 2012

Для первой части вы хотите использовать объект File, который Java предоставляет для вас OOB. Затем вам нужно будет прочитать значения из этого файла, я бы порекомендовал объект FileReader. Когда вы создаете экземпляр объекта File, вам необходимо использовать поиск индекса из массива args String.

Для второй части программа уже делает это. Если вы хотите ограничить количество аргументов, вам нужно проверить переменную args.length по отношению к желаемым входным параметрам.

0 голосов
/ 23 февраля 2012

1) Прочитайте файл построчно, разделите строки по вашему разделителю, и все будет хорошо (гугл, как это сделать)

2) Программа уже принимает параметры.Они находятся в вашем массиве args.Вы просто должны их использовать (args [0], args [1] ...)

...