• 单源最短路径 Dijkstra算法


    第一看完Dijkstra算法感觉就四个字————步步贪心

    想学Dijkstra算法得了解动态规划的思想

    怎么解释呢???
    举个例子

    有一张图n个顶点m条边 每条边上都有权值叫你求顶点1到其他顶点的最短路径

    step 1    找出离顶点1最近的点(这好找吧)使用一个数组将每个点到顶点1 的最短路径记录下来(dis数组)

    还有已经找到离顶点1最短路径的要记录下来可以使用一个book数组记录(防止重复记录)

    将dis数组中的值于e[][]+dis[][比较  如果后者较小 则更新dis数组

    step 2   重复step1 直到book数组中全部记录完全

    还是贴代码吧 累

    #include<iostream>
    #define inf 0x333f
    using namespace std;
    int main()
    {
        int dis[10],book[10],e[10][10],n,m,a,b,v,min,flag;//n表示顶点,m表示边 
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(i==j)
                e[i][j]=0;
                else
                e[i][j]=inf;
            }
        }
        for(int i=1;i<=m;i++)
        {
            cin>>a>>b>>v;
            e[a][b]=v;
        }
        for(int i=1;i<=n;i++)
        {
            dis[i]=e[1][i];
         } 
             for(int i=1;i<=n;i++)
        {
            book[i]=0;
         } 
         book[1]=1;
         //找到离单源最短的顶点
         min=inf;
         for(int i=1;i<n;i++)
         {
             min=inf;
             for(int j=1;j<=n;j++)
             {
                 if(book[j]==0&&dis[j]<min)
                 {
                     min=dis[j];
                     flag=j;
                 }
             }
             book[flag]=1;
             for(int k=1;k<=n;k++)
             {
                 if(e[flag][k]<inf)
                 {
                     if(dis[k]>dis[flag]+e[flag][k])
                     dis[k]=dis[flag]+e[flag][k];
                 }
             }
         }
         for(int i=1;i<=n;i++)
         cout<<dis[i]<<" ";
         return 0;
     } 
     
     
     
     
     
     
     

     2020/2/13更新

    写的还不错,现在看思路还算清晰,给过去的自己一个好评。

    如果你够坚强够勇敢,你就能驾驭他们
  • 相关阅读:
    基础命令
    RHEL7装机
    模拟项目
    配置NAT,PAT
    配置标准ACL,扩展ACL,命名ACL
    HSRP,STP配置
    三层交换配置及RIP动态路由
    vlan,trunk,DHCP,以太网通道
    ERRORS: MRBC.UserInfo.groups: (fields.E304) Reverse accessor for 'UserInfo.groups' clashes with reverse accessor for 'User.groups'. HINT: Add or change a related_name argument to the definition for '
    权限rbac(基于角色的访问控制)
  • 原文地址:https://www.cnblogs.com/liuzhaojun/p/11132220.html
Copyright © 2020-2023  润新知