人工智能——搜索算法

人工智能——搜索算法

实验题目

  • 求解罗马尼亚度假问题,找到从Arad到Bucharest的一条路径
  • 实现两种搜索算法求解该问题
  • 罗马尼亚问题的状态空间图如下

在这里插入图片描述

实验语言和算法

实验语言:C/C++
算法: D f s     D i j k s t r a Dfs\ \ \ Dijkstra Dfs   Dijkstra(最小堆优化) A ∗ ( D i j k s t r a 优 化 ) A^*(Dijkstra优化) A(Dijkstra)

实验算法

1. D F S DFS DFS算法

1. 算法思路:
  1. 利用邻接表存储地图信息
  2. 从起始点s开始,利用邻接表开始寻找与起始点相连的点v,并标记vis[s],防止重复搜索
  3. 将v作为新的当前起始点,进入下一层搜索进行
  4. 取消步骤2中标记,寻找下一个与当前起点相连的结点,重复步骤2-3
  5. 该递归程序边界为:当遍历到终点d,进行输出 s 0 − > d s0->d s0>d的步骤,或者遍历完所有的相连结点,发现均已被访问,则满足两者之一则进行回溯步骤
  6. 算法结束
2. 算法分析
  • 时间复杂度 : O ( b n ) O(b^n) O(bn),其中 b b b为深度因子, n n n为宽度因子
  • 空间复杂度: O ( b n ) O(bn) O(bn)

2. Dijkstra最小堆优化

1. 算法思路:
  1. D i j k s t r a Dijkstra Dijkstra算法采用贪心策略,初始时声明一个 a n s ans ans数组来存储从起点 s s s到各个终点的最短路径长度。
  2. 初始时, a n s [ s ] = 0 ans[s]=0 ans[s]=0,并声明一个 p r i o r i t y _ q u e u e priority\_queue priority_queue来求当前队列中距离起点最短的路径进行出队列来进行访问,初始 p r i o r i t y _ q u e u e priority\_queue priority_queue加入起点 a n s [ s ] = 0 ans[s]=0 ans[s]=0
  3. 当该优先队列非空,将当前距离起点最小的顶点fr出队,并标记其访问,依次遍历其相连的顶点 i i i,若其顶点 i i i当前最短路径 a n s [ i ] > ( a n s [ f r ] ans[i]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值