Dijkstra java代码有问题

Dijkstra java代码有问题,java,arraylist,Java,Arraylist,Dijkstra算法有问题 试图在两个城市之间找到道路 下面是我的java类 ConnectedVertices类是vertice数组所在的位置 我使用arraylist来生成城市之间的连接 package main; public class Edges { public String u; public String v; public String d; public Edges(String city1, String city2, String di

Dijkstra算法有问题

试图在两个城市之间找到道路

下面是我的java类

ConnectedVertices类是vertice数组所在的位置

我使用arraylist来生成城市之间的连接

package main;

public class Edges
{
    public String u;
    public String v;
    public String d;

    public Edges(String city1, String city2, String distance)
    {
        u = city1;
        v = city2;
        d = distance;
    }
    public Edges(int city1, int city2, int distance)
    {
        u = String.valueOf(city1);
        v = String.valueOf(city2);
        d = String.valueOf(distance);
    }
}
这是表示图形的顶点和arraylist

package main;

import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.List;
import java.util.Collections;
import org.apache.commons.lang3.ArrayUtils;

public class ConnectedVertices
{
   public String[] vertice = { "lagos", "ikeja", "Benin city", "Agbor", "Sagamu", "Ibadan",
                        "Iwo", "Osogbo", "Abuja", "Kafanchan", "Jos", "Bauchi", "Gombe",
                       "Biu", "N’djamena", "Dikwa", "Maiduguri", "Damaturu", "Potiskum", 
                       "Azare", "Dutse", "Wudil", "Kano", "Kusada", "Chafe", "Gusau",
                       "Talata-Mafara", "Kaduna", "Zaria", "Ikire", "Ondo", "Sapele", "Warri",
                       "Yenegoa", "Portharcourt", "Aba",  "Ikot-ekpene", "Oturkpo", "Makurdi",
                       "Idah", "Lokoja", "Abaji", "Umuahia", "Owerri", "Akwa", "Damboa", 
                       "Egbe-ejiba", "katsina", "Sokoto", "Ore", "Calabar", "Agbor", "Onitsha",
                       "Lafia", "Enugu"};

   //public ArrayList<Edges> edges = new ArrayList();
   ArrayList<Edges> edges = new ArrayList<Edges>();

   public ConnectedVertices()
   {
       AddEdges();
   }

   class Vertex implements Comparable<Vertex>
   {
       public final String name;
       //public Edge[] adjacencies;
       public double minDistance = Double.POSITIVE_INFINITY;
       public Vertex previous;
       public Vertex(String argName) { name = argName; }
       public String toString() { return name; }
       public int compareTo(Vertex other)
       {
           return Double.compare(minDistance, other.minDistance);
       }

   }

   @SuppressWarnings("unchecked")
public void AddEdges()
   {
       edges.add(new Edges(0, 1, 46));
       edges.add(new Edges(1, 4, 55));
       edges.add(new Edges(1, 2, 304));
       edges.add(new Edges(2, 49, 107));
       edges.add(new Edges(2, 31, 63));
       edges.add(new Edges(2, 3, 70));
       edges.add(new Edges(3, 51, 79));
       edges.add(new Edges(4, 5, 84));
       edges.add(new Edges(5, 6, 46));
       edges.add(new Edges(5, 29, 31));
       edges.add(new Edges(6, 7, 48));
       edges.add(new Edges(7, 46, 154));
       edges.add(new Edges(8, 46, 388));
       edges.add(new Edges(8, 9, 171));
       edges.add(new Edges(8, 27, 187));
       edges.add(new Edges(9, 10, 110));
       edges.add(new Edges(10, 11, 130));
       edges.add(new Edges(10, 52, 206));
       edges.add(new Edges(11, 12, 157));
       edges.add(new Edges(12, 13, 126));
       edges.add(new Edges(13, 45, 101));
       edges.add(new Edges(14, 15, 177));
       edges.add(new Edges(15, 16, 142));
       edges.add(new Edges(16, 17, 133));
       edges.add(new Edges(17, 18, 99));
       edges.add(new Edges(18, 19, 148));
       edges.add(new Edges(19, 20, 106));
       edges.add(new Edges(20, 21, 77));
       edges.add(new Edges(21, 22, 38));
       edges.add(new Edges(22, 23, 112));
       edges.add(new Edges(22, 24, 245));
       edges.add(new Edges(23, 47, 94));
       edges.add(new Edges(24, 25, 41));
       edges.add(new Edges(25, 26, 95));
       edges.add(new Edges(26, 48, 111));
       edges.add(new Edges(27, 28, 80));
       edges.add(new Edges(27, 8, 185));
       edges.add(new Edges(27, 10, 217));
       edges.add(new Edges(28, 22, 157));
       edges.add(new Edges(29, 30, 109));
       edges.add(new Edges(30, 49, 96));
       edges.add(new Edges(31, 32, 40));
       edges.add(new Edges(32, 33, 137));
       edges.add(new Edges(33, 34, 116));
       edges.add(new Edges(34, 35, 61));
       edges.add(new Edges(35, 36, 41));
       edges.add(new Edges(36, 50, 109));
       edges.add(new Edges(36, 42, 50));
       edges.add(new Edges(37, 38, 109));
       edges.add(new Edges(37, 53, 156));
       edges.add(new Edges(38, 52, 101));
       edges.add(new Edges(39, 51, 142));
       edges.add(new Edges(39, 40, 122));
       edges.add(new Edges(40, 41, 88));
       edges.add(new Edges(41, 8, 113));
       edges.add(new Edges(42, 53, 126));
       edges.add(new Edges(43, 51, 42));
       edges.add(new Edges(43, 34, 106));
       edges.add(new Edges(44, 51, 46));
       edges.add(new Edges(44, 53, 129));
       edges.add(new Edges(45, 16, 88));
       System.out.println("Contents of all locations: " + edges.size());
   }

   public String Connected(String first, String second)
   {
       int p,a;
       for (int i = 1; i <= edges.size(); i++) {
           for (int j = 0; j < edges.size(); j++) {
            //this is as far i could go...
        }
       }


   }

}
packagemain;
导入java.util.ArrayList;
导入java.util.PriorityQueue;
导入java.util.List;
导入java.util.Collections;
导入org.apache.commons.lang3.ArrayUtils;
公共类连接顶点
{
公共字符串[]vertice={“lagos”、“ikeja”、“Benin city”、“Agbor”、“Sagamu”、“Ibadan”,
“Iwo”、“Osogbo”、“Abuja”、“Kafanchan”、“Jos”、“Bauchi”、“Gombe”,
“比乌”、“恩贾梅纳”、“迪克瓦”、“迈杜古里”、“达马图鲁”、“波提斯库姆”,
“阿扎雷”、“杜塞”、“乌迪尔”、“卡诺”、“草田”、“摩擦”、“古索”,
“塔拉塔·马法拉”、“卡杜纳”、“扎里亚”、“伊凯尔”、“昂多”、“萨佩莱”、“瓦里”,
“Yenegoa”、“Portharcourt”、“Aba”、“Ikot ekpene”、“Oturkpo”、“Makurdi”,
“伊达”、“洛科哈”、“阿巴吉”、“乌穆阿希亚”、“欧韦里”、“阿克瓦”、“达姆博亚”,
“Egbe ejiba”、“katsina”、“Sokoto”、“Ore”、“Calabar”、“Agbor”、“Onitsha”,
“Lafia”、“Enugu”};
//public ArrayList edges=new ArrayList();
ArrayList Edge=新的ArrayList();
公共连接顶点()
{
添加();
}
类Vertex实现了可比较的
{
公共最终字符串名;
//公共边缘[]邻接;
公众的双重心态=双重积极无限;
公共场所;
公共顶点(字符串argName){name=argName;}
公共字符串toString(){return name;}
公共整数比较(顶点其他)
{
返回Double.compare(minDistance,other.minDistance);
}
}
@抑制警告(“未选中”)
公共无效附录()
{
添加(新边(0、1、46));
边。添加(新边(1、4、55));
添加(新边(1,2,304));
添加(新边(2、49、107));
添加(新边(2,31,63));
添加(新边(2、3、70));
添加(新边(3,51,79));
添加(新边(4、5、84));
添加(新边(5、6、46));
添加(新边(5、29、31));
添加(新边(6、7、48));
添加(新边(7、46、154));
添加(新边(8、46、388));
添加(新边(8、9、171));
添加(新边(8、27、187));
添加(新边(9、10、110));
添加(新边(10、11、130));
添加(新边(10、52、206));
添加(新边(11、12、157));
添加(新边(12、13、126));
添加(新边(13、45、101));
边缘。添加(新边缘(14、15、177));
添加(新边(15、16、142));
添加(新边(16、17、133));
添加(新边(17、18、99));
添加(新边(18、19、148));
添加(新边(19、20、106));
添加(新边(20、21、77));
添加(新边(21、22、38));
添加(新边(22、23、112));
添加(新边(22、24、245));
添加(新边(23、47、94));
添加(新边(24、25、41));
添加(新边(25、26、95));
添加(新边(26、48、111));
添加(新边(27、28、80));
添加(新边(27、8、185));
添加(新边(27、10、217));
添加(新边(28、22、157));
添加(新边(29、30、109));
添加(新边(30、49、96));
添加(新边(31、32、40));
添加(新边(32、33、137));
添加(新边(33、34、116));
添加(新边(34、35、61));
添加(新边(35、36、41));
添加(新边(36、50、109));
添加(新边(36、42、50));
添加(新边(37、38、109));
添加(新边(37、53、156));
添加(新边(38、52、101));
添加(新边(39、51、142));
添加(新边(39、40、122));
添加(新边(40、41、88));
添加(新边(41、8、113));
添加(新边(42、53、126));
添加(新边(43、51、42));
添加(新边(43、34、106));
添加(新边(44、51、46));
添加(新边(44、53、129));
添加(新边(45、16、88));
System.out.println(“所有位置的内容:+edges.size());
}
已连接公共字符串(第一个字符串,第二个字符串)
{
int p,a;

对于(int i=1;i您需要对算法进行更多的解释,我认为:

   int p,a;
   for (int i = 1; i <= edges.size(); i++) {
       for (int j = 0; j < edges.size(); j++) {
        //this is as far i could go...
    }
   }
intp,a;

对于(int i=1;我这么说-Dijkstra算法有问题不足以了解您面临的问题以及代码中不起作用的内容。提出具体问题以获得答案。您没有描述您的实际问题,请参见。我正在尝试获取两个城市之间的连接,它们的连接在arraylist中不存在。在我试图获取连接表单的连接函数指向顺序。@Tabytha您的方法已经很难开始了…每个城市都只是一个数字…我建议使用一种更为禁忌的方法…但是关于算法。您从一个点开始(假设城市1),然后想去另一个城市(假设城市45)。对于连接到城市1的每个城市,您应该注册距离,然后对连接的城市注册距离,以便它们与城市1具有相同的距离。不要访问已经访问过的节点。最后,您应该拥有最短的距离。有关信息,请参阅Wiki:ttps://en.wikipedia.org/wiki/Dijkstra%27s_algorithm