图搜索算法UCS(一致代价搜索)通俗易懂图示详解

一致代价搜索实际上是在BFS(广度优先搜索算法)的基础上进行扩展的,我们在上一篇博客图搜索算法BFS和DFS通俗易懂图示详解中提到,BFS是基于队列数据结构的,既然UCS是BFS的扩展,那么UCS一定也是基于队列的,由此我们很容易想到,UCS是基于优先级队列数据结构的。
在这里插入图片描述
我们考虑从成都出发,搜索石家庄。
首先优先级队列(以下简称PQ)中只有成都,但它是起点,所以父节点为空

父节点
子节点成都
代价0

接下来从成都开始搜索,没有找到目标,把成都从PQ弹出,加入它的三个邻接城市西宁,兰州,重庆

父节点成都成都成都
子节点成都西宁兰州重庆
代价06110043

此时搜索重庆代价最小,将重庆弹出PQ,加入它的两个邻接城市西安与武汉,此时从成都到西安的代价变成了43+76=119,从成都到武汉的代价变成43+118=161

父节点成都成都成都重庆重庆
子节点成都西宁兰州重庆西安武汉
代价06110043119161

此时最小代价城市变成了西宁,把西宁从PQ弹出,它的邻接城市有兰州,银川,成都,但是成都不在PQ中不再考虑,而尽管兰州已在PQ中,但由于从成都到西宁再到兰州的代价大于从成都直接到兰州,所以不再将其加入PQ(倘若前者小于后者代价则需要替换掉原来的代价),所以将尚未入PQ的银川加入PQ

父节点成都成都成都重庆重庆西宁
子节点成都西宁兰州重庆西安武汉银川
代价06110043119161119

接下来最小代价城市为兰州,将其弹出,其邻接城市均已在PQ中且无需更新代价

父节点成都成都成都重庆重庆西宁
子节点成都西宁兰州重庆西安武汉银川
代价06110043119161119

接下来最小代价城市有两个,其代价均为119,任选一个即可,这里以西安作为最小代价城市,其邻接城市中需要加入PQ的有郑州和太原,并将西安弹出

父节点成都成都成都重庆重庆西宁西安西安
子节点成都西宁兰州重庆西安武汉银川太原郑州
代价06110043119161119187163

接下来是银川,将其从PQ弹出,其邻接城市均已被访问且不需要更新代价

父节点成都成都成都重庆重庆西宁西安西安
子节点成都西宁兰州重庆西安武汉银川太原郑州
代价06110043119161119187163

然后是武汉,将其从PQ弹出,其邻接城市均已被访问且不需要更新代价

父节点成都成都成都重庆重庆西宁西安西安
子节点成都西宁兰州重庆西安武汉银川太原郑州
代价06110043119161119187163

接下来是郑州,这时把石家庄加入PQ,然后把郑州弹出

父节点成都成都成都重庆重庆西宁西安西安郑州
子节点成都西宁兰州重庆西安武汉银川太原郑州石家庄
代价06110043119161119187163201

然后是太原,将其从PQ弹出,其邻接城市均已被访问且不需要更新代价

父节点成都成都成都重庆重庆西宁西安西安郑州
子节点成都西宁兰州重庆西安武汉银川太原郑州石家庄
代价06110043119161119187163201

最后将石家庄弹出,这样就找到了从成都到石家庄花费最少代价的路径

父节点成都成都成都重庆重庆西宁西安西安郑州
子节点成都西宁兰州重庆西安武汉银川太原郑州石家庄
代价06110043119161119187163201

回溯得到路径:成都 --> 重庆 --> 西安 --> 郑州 --> 石家庄,总代价为201

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值