一致代价搜索算法UCS_BFS

一致代价搜索算法UCS_BFS

算法原理: 利用优先队列(优先级属性为每一步的路径代价)后进先出的性质来一层层的遍历。一致代价搜索每次都选择下一步路径代价最小的值进行贪心的拓展。这可以通过将边缘结点集组织成按单步代价值排序的优先队列来实现。
算法时间空间复杂度分析:时间复杂度:O(b^(1+[C*/ε] ) ) 空间复杂度:O(b^(1+[C*/ε] ) )

算法步骤:
1)将开始结点压入优先队列中;
2)取出队列结点当前拓展结点,设置为已访问;
3)判断当前结点是否为目标结点,若是则输出路径搜索结束,否则进行下一步;
4)访问当前结点的所有相邻子节点;
5)判断该该子节点是否被访问过,若已经访问过则回到2),若还未访问过则继续下一步6);
6)对于每一个子节点,获取其相关信息值并进行路径更新,将其子节点的父亲结点指向当前结点,返回2);
7)若优先队列为空还未找到目标结点,返回搜索失败;

package 实验一;

import java.util.PriorityQueue;

public class UCS_BFS extends BuildGraph{
	public void ShortestPath(){
		ShortestPath(start,end);
	}
	public void ShortestPath(Vertex startNode,Vertex endNode){
		//初始化
		 PriorityQueue<Vertex> priorityQueue=new PriorityQueue<>();
		 priorityQueue.add(startNode);
		  while(!priorityQueue.isEmpty()){
		     Vertex v = priorityQueue.remove();
		     explored.put(v.vertexLabel, 1);
			 if(v.vertexLabel==endNode.vertexLabel){
				 System.out.println("UCS_BFS Route:");
				 showPath(v,startNode);
				 return;
			 }
			 for(int i=0;i<v.child.size();i++){
				 Vertex current=v.child.get(i).endVertex;
				 //System.out.println(explored.get(current.vertexLabel));
				 if(explored.get(current.vertexLabel)==0){
					 current.dist=v.dist+v.adjEdges.get(v.child.get(i));
					 priorityQueue.add(current);
					 current.preNode=v;
				 }
			 }			
		}
		System.out.println("UCS_BFS Route:"+" Failure!");
		return;

	}
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值