zoukankan      html  css  js  c++  java
  • 算法总结——Dijkstra

    Dijkstra:

    复杂度:O(n^2)

    用途:求起点到终点的最短路径,不需要吧每个点走到

    适用条件:

    原理:利用邻接矩阵,用d数组记录最小值,用p标记是否用过这组数据。

    步骤:一大for,两小for,第一个小for用来的出当前的d中的最小值,为了得到下标,第二个小for用来更新map最小值,得出结果,循环整张地图n次

    模板:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int inf = 0x3f3f3f3f, MAX = 300;
    int min1,x,y,z,k,n,m;
    int map[MAX][MAX],p[MAX],d[MAX];
    void dijkstra(int map[][MAX],int n)
    {
        for(int i = 1; i <= n ; i++)
            d[i] = inf;
        d[1] = 0;
        for(int i = 1; i <= n ; i++){
                min1 = inf;
              for(int j = 1; j <= n ; j++){
                    if(!p[j] && d[j] < min1){
                         min1 = d[j];
                         k = j;
                    }
              }
              p[k] = 1;
              for(int j = 1; j <= n ; j++){
                    if(!p[j] && d[j] > d[k] + map[k][j])
                        d[j] = d[k] + map[k][j];
              }
        }
        printf("%d",d[n]);
    }
    int main(){
        memset(p,0,sizeof(p));
        scanf("%d%d",&n,&m);
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n ; j++)
              map[i][j] = inf;
        for(int i = 1; i <= m ; i++){
            scanf("%d%d%d",&x,&y,&z);
            map[x][y] =z;
        }
        dijkstra(map,n);
        return 0;
    }
  • 相关阅读:
    css(上)
    前端基础
    并发编程,python的进程,与线程
    网络编程 套接字socket TCP UDP
    python 类的内置函数2
    python3大特征之多态
    python 类(object)的内置函数
    类 与 继承
    类 与 面向对象
    OOP >>> 封装
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4354466.html
Copyright © 2011-2022 走看看