【问题标题】:uniform cost search making some trouble统一成本搜索带来一些麻烦
【发布时间】:2016-05-19 14:06:45
【问题描述】:

我正在制作统一成本搜索的程序,但是在我的代码中,当我将节点放入优先级队列时,节点会覆盖......我不知道是什么问题。

例如,如果节点 A 已经存在于值为 10 的队列中,并且如果我再次将节点 A 放入值为 20,那么前一个节点 A 的值也会改变。

有人可以帮忙吗?

while(!queue.isEmpty())
        {
            Node temp=queue.remove();
            System.out.println(temp.city_name+" "+temp.getPath_cost());
            path.add(temp);
            if(temp==destination)
            {
                break;
            }
            System.out.println(temp.link.length);
            for(int i=0; i<temp.link.length; i++){
                a=temp.link[i].cost;
                b=temp.link[i].getParent().getPath_cost();
                temp.link[i].getNode().setPath_cost(a+b);
                System.out.print(temp.link[i].getNode().city_name+": ");
                System.out.println(temp.link[i].getNode().getPath_cost());
                queue.add(temp.link[i].getNode());
            }
        }

【问题讨论】:

    标签: java netbeans artificial-intelligence


    【解决方案1】:

    看起来你的节点直接持有路径成本,所以只有一个对节点的引用。图中的顶点(节点)不需要知道它们的搜索路径成本;相反,搜索通常为在评估时评估的每个节点实现一个包装器,该包装器存储搜索特定信息,如路径成本。基本上,您查询节点的邻居(您的 impl 中的link 属性)并为每个邻居创建一个新的包装器实例。

    话虽如此,如果您只是在寻找最短路径,那么您可以放心地将路径成本设置为现有路径成本和当前评估的路径成本的最小值。您可以从将每个节点的路径成本设置为正无穷大开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2013-01-18
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多