zoukankan      html  css  js  c++  java
  • 各类最短路算法基本模板-C++

    原文转自:https://blog.csdn.net/changjiale110/article/details/77394650
    感谢。

    #define Max 0x3f3f3f3f
    #define maxn 10010
    int n,m;
    int Map[maxn][maxn];
    int dist[maxn];
    int vist[maxn];
    

    Floyd:

    void floyd()
    {
        int i,j,k;
        for (k=1; k<=n; k++)
        {
            for(i=1; i<=n; i++)
            {
                for (j=1; j<=n; j++)
                {
                    Map[i][j]=min( Map[i][j],Map[i][k]+Map[k][j] );
                }
            }
        }
    }
    

    Dijkstra:

    void Dijkstra(int s)
    {
        int i,j;
        int u;
        int Min;
        for (i=1; i<=n; i++)
        {
            vist[i]=0;
            dist[i] = Map[s][i];
        }
        vist[s] = 1;
        for (i=1; i<=n; i++)
        {
            Min=Max;
            u = -1;
            for (j=1; j<=n; j++)
            {
                if (vist[j]==0&&dist[j]<Min)
                {
                    u = j;
                    Min = dist[j];
                }
            }
            if (u==-1)
                break;
            vist[u] = 1;
            for (j=1; j<=n; j++)
            {
                if(vist[j]==0)
                {
                    if(dist[u]+Map[u][j]<dist[j])
                        dist[j] = dist[u]+Map[u][j];
                }
            }
        }
    }
    

    SPFA:

    void spfa(int s)
    {
        int i,now;
        for( i=1;i<=n;i++ )
        {
            dist[i]=Max;
            vist[i] = 0;
        }
        dist[s] = 0;
        queue<int>q;
        q.push(s);
        vist[s] = 1;
        while (!q.empty())
        {
            now = q.front();
            q.pop();
            vist[now] = 0;
            for( i=1;i<=n;i++)
            {
                if (dist[i]>dist[now]+Map[now][i])
                {
                    dist[i] = dist[now]+Map[now][i];
                    if (vist[i] == 0)
                    {
                        q.push(i);
                        vist[i] = 1;
                    }
                }
            }
        }
    
    }
    
    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    【转载】面对酱紫的情况,肿么办哇?
    webform 基础
    LINQ 语句实现分页
    LINQ to SQL 语句
    发送邮件&Timer
    treeview递归
    进程&线程
    登录框记住账号
    窗体-对话框,记事本
    日期与地区的三级联动
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11167773.html
Copyright © 2011-2022 走看看