算法分析与实践

  1. 问题
    在有向图 G=(V,E) 使用Dijkstra算法找到由顶点 V0 到其余各点的最短值。
    算法分析与实践

  2. 解析
    算法分析与实践
    Dis初值为0;
    从a行开始找可行并且距离最近的下一个点为b,Dis=0+1=1;
    找到b之后,从b行开始找可行并且距离最近的下一个点为d,Dis=1+2=3;
    找到d之后再从d行开始找可行并且距离最近的下一个点为f,Dis=3+8=11;
    找到f之后再从f行开始找可行并且距离最近的下一个点为e,Dis=11+2=13;
    找到e之后再从e行开始找可行并且距离最近的下一个点为g,Dis=13+2=15;
    找到g之后再从g行开始找可行并且距离最近的下一个点为h,Dis=15+3=18;
    输出Dis=18;
    结束。

  3. 设计
    [核心伪代码]
    void Dijkstra(int D)
    {
    memset(vis,0,sizeof(vis));
    for(int t=1;t<=n;t++)
    {
    dis[t]=map[D][t];
    }
    vis[D]=1;
    for(int t=1;t<n;t++)
    {
    int minn=Inf,temp;
    for(int i=1;i<=n;i++)
    {
    if(!vis[i]&&dis[i]<minn)
    {
    minn=dis[i];
    temp=i;
    }
    }
    vis[temp]=1;
    for(int i=1;i<=n;i++)
    {
    if(map[temp][i]+dis[temp]<dis[i])
    {
    dis[i]=map[temp][i]+dis[temp];
    }
    }
    }

}
4. 分析
[算法复杂度推导]
5. 源码
[github源码地址]
https://github.com/xujinyuanky/-/tree/master