《Java中的算法,第5部分》一书的补充代码(Sedgewick)

《Java中的算法,第5部分》一书的补充代码(Sedgewick),java,algorithm,Java,Algorithm,我们在我的学院里有一门高级算法课程,我们每个人都有一个作业来描述《Java中的算法》一书中的特定算法。当然,我们还必须用Java实现这本书中的代码,以展示该算法在具体示例中的工作原理 书中已经提供了我们必须用于图形、节点、边等的类,但对我和其他一些学生来说,代码中有一些错误阻止了它的编译 我找到的唯一实现是: 但这和书中的代码是一样的,它不起作用 我遇到问题的代码如下: GraphSPT(Graph G, int s) { int V = G.V(), N = 0; wt =

我们在我的学院里有一门高级算法课程,我们每个人都有一个作业来描述《Java中的算法》一书中的特定算法。当然,我们还必须用Java实现这本书中的代码,以展示该算法在具体示例中的工作原理

书中已经提供了我们必须用于图形、节点、边等的类,但对我和其他一些学生来说,代码中有一些错误阻止了它的编译

我找到的唯一实现是: 但这和书中的代码是一样的,它不起作用

我遇到问题的代码如下:

  GraphSPT(Graph G, int s)  
  { int V = G.V(), N = 0;
    wt = new double[V]; spt = new Edge[V]; 
    for (int v = 0; v < V; v++) wt[v] = maxWT; 
    intQueue Q = new intQueue(G.E());
    wt[s] = 0.0; Q.put(s);  Q.put(V);
    while (!Q.empty()) 
    { int v;
      while ((v = Q.get()) == V) 
        { if (N++ > V) return; Q.put(V); }
      AdjList A = G.getAdjList(v);
      for (Edge e = A.beg(); !A.end(); e = A.nxt()) /* this line is the one with the problem */
        { int w = e.other(v); 
          double P = wt[v] + e.wt();
          if (P < wt[w]) 
            { wt[w] = P; Q.put(w); spt[w] = e; }
        }
    }
  }
我标记了有问题的行。前一行中的AdjList是一个接口,但getAdjList方法返回AdjLinkedList类的实例,该类包含beg、end和nxt方法的实现。出现此问题是因为它们返回整数,而不是Edge类的实例。如果我将for循环中的初始值设定项更改为int e…,那么循环中的代码将不起作用,因为它调用e对象上的other和wt方法

是否有人也有同样的问题,或者是否有人知道这本书中是否有可供下载的工作代码实现


允许使用书中的课程,我只需要用我自己的代码来表示图形,如果类实际工作,这根本不是问题:

如果a.end返回一个布尔值或一个表示它是否在列表末尾的整数0/1,那么a.beg可能返回一个布尔值或一个指定它是否在列表开头的整数0/1。因此,编写示例代码的人可能与编写边缘代码的人不同,他们希望beg函数具有不同的功能。

什么是“问题”?你收到错误消息了吗?@Birryrree是的,循环初始化中的Edge e需要的是A.beg的Edge对象,而不是int。我明天可以发布输出,我现在不在我的机器上。将该行替换为forEdge e:A work吗?@Kevin public int beg{t=adj[v];返回t==null?-1:t.v;}该方法返回一个int。@DanielFischer我明天会通知您。谢谢你的提示。在我看来,作为代码示例创建这种Java的作者应该被枪毙。如果在我工作的公司里有人输入这种代码,他们会得到一次严肃的谈话。只要你们大家都知道这不是编程的方式谁知道。。。最后,我们的教授接受了算法的理论解释,让我们通过。无论如何,谢谢大家的帮助!