自动驾驶面经总结(一)

自动驾驶面经总结(一)


前言

做一点总结学习


一、Dijstra算法,算法流程

Dijkstra算法是一种基于贪心策略的最短路径算法,它的核心思想是按照路径长度逐点增长的方法构造一棵路径树,从而得出从该树的根节点(即指定节点)到其他所有节点的最短路径。

个人的理解就是逐渐把新的节点加入到已知的节点,看看路径有没有变短,变短了就把最短路径数组更新。即dis[n] > dis[n+1] +mp[n+1][m];

Dijkstra算法的流程如下:

  1. 创建一个集合S,用于存放已经找到了最短路径的顶点。
  2. 创建一个数组dis,用于保存源点到各个顶点的最短距离。
  3. 初始化dis数组,将源点到自己的距离赋值为0,其他顶点到源点的距离赋值为无穷大。
  4. 从dis数组中找到距离源点最近的顶点v,并将其加入集合S中。
  5. 遍历v的邻居w,如果w不在集合S中,则更新dis数组中w的距离值。具体来说,如果源点到v的距离加上v到w的距离小于源点到w的距离,则更新dis[w]为这个更小的值。
  6. 重复步骤4和5,直到所有顶点都被加入集合S中。

Dijkstra算法可以应用于路径规划问题
可以但是要把地图离散为顶点和边。
例如,在地图上找到两个地点之间的最短路径。在这种情况下,每个地点可以看作图中的一个顶点,而地点之间的道路可以看作图中的一条边。通过使用Dijkstra算法,我们可以找到从一个地点到另一个地点的最短路径。

Dijkstra算法是动态规划的思想吗?
Dijkstra算法是一种基于贪心、广度优先搜索和动态规划的算法,用于求解一个图中一个点到其他所有点的最短路径 ²。Dijkstra算法建立在带open标记的动态规划算法之上,但在选取推进点时只选取valu值已达终态的点v(称为"极元")¹。

因此,Dijkstra算法和动态规划有一定的关系,但是它们的框架是相同的,不同点仅在于“推进点的选取”和“算法终止条件”

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 1005;
int n, m, s, t;
int dis[MAXN], vis[MAXN];
int mp[MAXN][MAXN];
void Dijkstra() {
   
   
    memset(dis, INF, sizeof(dis));
    memset(vis, 0, sizeof(vis));
    dis[s] = 0;
    for (int i = 1; i <= n; i++) {
   
   
        int k = -1;
        for (int j = 1; j <= n
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值