zoukankan      html  css  js  c++  java
  • 单源最短路径 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更新

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

    如果你够坚强够勇敢,你就能驾驭他们
  • 相关阅读:
    Maximum Profit Aizu
    Maximum Profit Aizu
    Codeforces Round #552 (Div. 3) —— B. Make Them Equal
    Codeforces Round #552 (Div. 3) —— B. Make Them Equal
    每周一题 —— 3n+1问题
    每周一题 —— 3n+1问题
    Georgia and Bob POJ
    Georgia and Bob POJ
    LeetCode 292. Nim Game
    OpenCV:初试牛刀-带滚动条的视频播放-2
  • 原文地址:https://www.cnblogs.com/liuzhaojun/p/11132220.html
Copyright © 2011-2022 走看看