有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

算法分支和绑定错误:节点1无法转换为java。可比的

我正在努力实施branch&;java中的绑定搜索算法。我知道它的概念(它是如何工作的),但我不确定如何实施它

我在谷歌上找到了一些例子,但它们要复杂得多,我似乎无法理解它们。我想用一种简单的方式实现它。而且大多数都不是用java编写的

以下是搜索开始的相关方法(这只是我代码的一部分)。 我认为我的for循环需要进行适当的修改,以存储前沿节点和成本,然后获得成本最低的节点,然后再次执行搜索,直到找到目标节点并添加累积成本
所以我想递归方法最适合这个。但我不知道如何实施

下面没有给我任何编译错误,但给我运行时错误Node1 cannot be cast to java.lang.Comparable。有人愿意调查这个问题吗?几个小时以来我一直在努力做这件事,但似乎找不到任何解决办法

此外,任何一小段代码都会指引我走上正确的道路

 public void Search(Node1[] nodes, String startNode, int size){

  List<String> frontierNodes = new ArrayList<String>();
  Queue<Node1> frontierCosts = new PriorityQueue<Node1>();

    for(int i=0; i<size;i++) {

        if(startNode.equals(nodes[i].getStartNode())) { // user enters the startNode and goalNode          

           frontierNodes.add(nodes[i].getEndNode());               
           frontierCosts.add(new Node1(nodes[i].getCost())); 
           frontierCosts.peek();
           System.out.println("Min cost" +frontierCosts.peek());
           int nodesLength = nodes.length - (frontierNodes.size()); 
           i--;
           System.out.println("remaining search nodes length" +nodesLength);

           //Search(nodes, frontierCosts.peek().getEndNode() ,nodesLength); // RECURSIVE CALL?
        } 
    }

} 

下面是存储文件信息的Node1类

class Node1 {
   String start, end;
   double cost;

   public Node1(String start, String end, double cost){
       this.start = start;
       this.end = end;
       this.cost = cost;
   }

   public Node1(double cost) { // alternate constructor to store cost in   priority queue
      this.cost = cost;
   }

   public String getStartNode(){
      return start;
   }

   public String getEndNode(){
      return end;
   }

   public double getCost(){
      return cost;
   }
}

以下是文件格式(startNode endNode成本)

A B 10 
A C 12
B D 6
....

[编辑]:

我想实现分支和绑定搜索,程序要求用户输入startNodegoalNode,然后从Node1类(存储文件数据的地方)访问数据,然后程序进入search方法(上面的方法),传递所有nodesstartNodelength of nodes(size)。 如果startNode匹配任何节点1[]。getStartNode,然后它将相应的扩展节点存储在frontierNodes中,并将其相应的开销存储在优先级队列的frontierCosts中(以选择最小的开销)。 然后程序窥视()优先级队列&;选择成本最低的节点(队列前面),然后再次搜索(递归调用上述搜索方法?)将该特定节点作为startNode,然后继续搜索
当程序到达新节点时,每个新节点的成本应该得到迄今为止访问的路径的累积成本,程序应该输出路径和成本


共 (0) 个答案