Java最短成本路径:从(.txt)文本文件中进行无信息/知情搜索



我正在处理一个不一致的搜索任务,但我被卡住了。

https://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;

}
}

我就是不知道该怎么做。如有任何帮助,我们将不胜感激。提前感谢

您需要使用args[]。命令行参数作为数组通过args[]变量传递给java程序。

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

通过分析文件填充映射。其余的代码应该按原样工作。

对于第1部分,您希望使用Java为您提供OOB的File对象。然后,您将需要从文件中读取值,我建议使用FileReader对象。实例化File对象时,需要使用args字符串数组中的索引查找。

对于第二部分,程序已经做到了。如果你想限制参数的数量,你需要根据你想要的输入参数来检查args.length变量

1)逐行读取文件,通过分隔符分割行,你应该可以去(谷歌如何做到这一点)

2) 程序已接受参数。它们在你的args数组中。您只需要使用它们(args[0],args[1]…)

最新更新