Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中二维数组的Dijkstra算法_Java_Algorithm_Multidimensional Array_Dijkstra - Fatal编程技术网

Java中二维数组的Dijkstra算法

Java中二维数组的Dijkstra算法,java,algorithm,multidimensional-array,dijkstra,Java,Algorithm,Multidimensional Array,Dijkstra,这是一个学校项目;我遇到了很多麻烦,我似乎找不到一个可以理解的解决办法 a b c d e z a - 2 3 - - - b 2 - - 5 2 - c 3 - - - 5 - d - 5 - - 1 2 e - 2 5 1 - 4 z - - - 2 4 - 这是二维数组。因此,如果你想找到最短路径,它是从a,b,e,d,z=7,和(a,b)=(b,a)--它带你到新行去寻找该行的相邻路径 有没有人能帮我实现这个例子中的Dijkstra算法?我真的很感激。(我似乎最喜欢数

这是一个学校项目;我遇到了很多麻烦,我似乎找不到一个可以理解的解决办法

   a b c d e z
 a - 2 3 - - -
 b 2 - - 5 2 -
 c 3 - - - 5 -
 d - 5 - - 1 2
 e - 2 5 1 - 4
 z - - - 2 4 -
这是二维数组。因此,如果你想找到最短路径,它是从a,b,e,d,z=7,和(a,b)=(b,a)--它带你到新行去寻找该行的相邻路径

有没有人能帮我实现这个例子中的Dijkstra算法?我真的很感激。(我似乎最喜欢数组,地图和集合让我有点困惑,列表是可管理的——尽管我愿意在这一点上研究任何类型的解决方案)


[至少我不是从网上窃取信息来源。我真的想学这些东西……这真的很难(>。您调用的2D数组表示法是图形的邻接矩阵表示法,您试图解决的问题是“单源最短路径”问题的一个实例。Dijkstra的算法旨在解决此类问题。这可能会有所帮助。请从网站下载代码并阅读文档n、 基本上,您需要编写类似于以下内容的代码

    RoutesMap map = map =  new DenseRoutesMap(5);
    map.addDirectRoute(City.A, City.B, 2);
    map.addDirectRoute(City.A, City.C, 3);
    map.addDirectRoute(City.B, City.A, 2);
    map.addDirectRoute(City.B, City.D, 5);
    map.addDirectRoute(City.B, City.D, 2);
    ...
    DijkstraEngine engine = new DijkstraEngine(map);
    int distance = engine.getShortestDistance(City.F);

不知道是否还有人对Dijikstra的矩阵表示法感兴趣,但我一直在考虑在Actionscript中对Dijikstra进行编码,因此首先必须自学Dijuikstra是如何工作的。在完成这项工作并尝试对其进行编码后,我昨晚才意识到,我可以在一个矩阵(如y)中表示节点和距离我的理论是,找到最短路径将是一件非常简单的事情。我仍在尝试以确保我的正确性

在矩阵中

a b c d e z a-23---- b 2--5 2- C3----5- d-5--12 e-2 5 1-4 z----24-

我开始查看行“a”(因为这是起点),并选择行中最小的数字为2(在b下)。因此,我以2为代价将路径写为“a-b”。然后我转到b行,再次在b的右侧找到最小的数字(因为我们已经在b节点处。这在“e”下给了我2。因此,路径现在是“a-b-e”总成本为4。然后我查看“e”行,规则应该是在“e”列后找到最小的数字。这将给我“z”,并将完整路径显示为“a-b-e-z”,总成本为8。但是,请记住,我昨晚才发现这一点,在查看“e”时,方法需要认识到这一点行另一种可能性是以1为代价转到d列。然后查看d行,查找d行之后的最低数字,这将以2为代价得到“z”行

因此,这是一个更好的解决方案,路径为“a-b-e-d-z”,总成本为7,正如您所说的那样

好的,我仍然需要用Actionscript编写代码,但我的直觉是,用Actionscript编写代码会很容易。恐怕我没有Java方面的经验,但如果你同意我的方法,用Java编写代码应该很容易


Paul

不幸的是,该网站对我帮助不大。它不处理我也需要的2D阵列……还有其他人有解决方案/建议吗?@Babar:很好的方法可以在不泄露所有信息的情况下将他推向正确的方向。+1非常好,TA式回答:)+1.@Stan-Babar鼓励您考虑实现算法,而不是数据结构。这绝对是学习解决方案的更好方法。谢谢各位——我肯定会尽快研究阅读和实现……虽然大部分时间是下周——这周我大部分时间都很忙。等我拿到答案后再发回来机会/时间;)!!
    RoutesMap map = map =  new DenseRoutesMap(5);
    map.addDirectRoute(City.A, City.B, 2);
    map.addDirectRoute(City.A, City.C, 3);
    map.addDirectRoute(City.B, City.A, 2);
    map.addDirectRoute(City.B, City.D, 5);
    map.addDirectRoute(City.B, City.D, 2);
    ...
    DijkstraEngine engine = new DijkstraEngine(map);
    int distance = engine.getShortestDistance(City.F);