Java最短成本路径:来自(.txt)文本文件的未通知/通知搜索

Java最短成本路径:来自(.txt)文本文件的未通知/通知搜索,java,artificial-intelligence,helper,shortest-path,Java,Artificial Intelligence,Helper,Shortest Path,我正在做一个不知情的搜索任务,但我被卡住了 我90%的工作正常,但我正在努力: 1) 从.txt文件加载数据(城市和英里),而不是从代码中的。 2) 允许程序接受三个命令行输入参数:输入文件名、起始城市和目标城市 示例:FindRoote inputFilename原始目的地 命令行示例:findulote input1.txt 这是我现在拥有的代码的一部分: package graph; import java.util.Formatter; import java.ut

我正在做一个不知情的搜索任务,但我被卡住了

我90%的工作正常,但我正在努力:

1) 从.txt文件加载数据(城市和英里),而不是从代码中的。 2) 允许程序接受三个命令行输入参数:输入文件名、起始城市和目标城市

示例:FindRoote inputFilename原始目的地

命令行示例:findulote 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;


}

}
包图;
导入java.util.Formatter;
导入java.util.List;
导入bisearch.UniformCostSearch;
导入搜索。操作;
公共级芬杜洛特{
/**
*寻找最短路径
*/
公共静态void main(最终字符串[]args){
Graph=findurote.Map();
GraphStateSpaceSearchProblem sssp=新GraphStateSpaceSearchProblem(
图形“Zerind”、“Oradea”);
bisearch.Search bisearch=new UniformCostSearch();
列表操作=bisearch.search(sssp);
printOutput(bisearch.nodesExplored(),actions);
}
/**
*打印找到的路径
*/
私有静态void打印输出(最终int节点扩展,
最后清单(行动){
双倍成本=0;
针对(最终行动:行动)
成本+=行动成本();
System.out.println(“距离:“+new Formatter().format”(“%.2f”,cost)+“m”);
System.out.println(“路径:”);
针对(最终行动:行动)
系统输出打印LN(动作);
}
/**
*将的贴图创建为图形
*/
私有静态图映射(){
最终图形=新图形();
图.AddUndirectedge(“Oradea”,“Zerind”,71);
图.AddUndirectedge(“Zerind”,“Arad”,75);
图.AddUndirectedge(“Arad”,“Sibiu”,140);
图.AddUndirectedge(“Sibiu”,“Oradea”,151);
图.AddUndirectedge(“Timisoara”,“Arad”,118);
图.AddUndirectedge(“Timisoara”,“Lugoj”,111);
图.AddUndirectedge(“Lugoj”,“Mehadia”,70);
图.AddUndirectedge(“Mehadia”,“Dobreta”,75);
图.AddUndirectedge(“Dobreta”,“Craiova”,120);
图.AddUndirectedge(“Sibiu”,“Fagaras”,99);
图.AddUndirectedge(“法加拉斯”,“布加勒斯特”,211);
图.AddUndirectedge(“Sibiu”,“Rimnicu-Vilcea”,80);
图.AddUndirectedge(“Pitesti”,“Rimnicu Vilcea”,97);
图.AddUndirectedge(“Craiova”,“Rimnicu-Vilcea”,146);
图.AddUndirectedge(“Craiova”,“Pitesti”,136);
图.AddUndirectedge(“皮特斯蒂”,“布加勒斯特”,101);
图.AddUndirectedge(“布加勒斯特”、“朱吉乌”,90);
图.AddUndirectedge(“布加勒斯特”,“乌尔齐塞尼”,85);
图.AddUndirectedge(“Urziceni”,“Hirsova”,98);
图.AddUndirectedge(“Hirsova”,“Eforie”,86);
图.AddUndirectedge(“Urziceni”,“Vaslui”,142);
图.AddUndirectedge(“Vaslui”,“Iasi”,92);
图.AddUndirectedge(“Neamt”,“Iasi”,87);
返回图;
}
}
我就是不知道怎么做。任何帮助都将不胜感激。提前感谢(1)逐行阅读文件,用分隔符将行分开,然后你就可以开始了(谷歌怎么做)


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

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

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

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

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


对于第二部分,程序已经做到了这一点。如果要限制参数的数量,需要对照所需的输入参数检查args.length变量。

通常,在家庭作业中,建议的方法是解释概念,而不是提供代码,除非对解释绝对重要。@Woot4Moo-这不是他需要的代码,这只是args数组的一个示例…我完全支持不在家庭作业标签上发布完整的解决方案,但这远远不是。