• Dijkstra算法


    Dijkstra算法是解决单源的最短路径的算法。该算法对于负值的图无能为力。

    所谓单源,就是起点已确定,但是终点不同,不同点到起点的最短路径。

    Dijkstra算法的大体思路是先找到与起点A相邻的点且距离起点最近的点B,AB的距离为B到A距离最近的点。在从B相邻的点和之前的点中比较找到距离A最近的点C。

    如此循环往复,确定每个点到点A的距离是最短的。

    #include <bits/stdc++.h>

    using namespace std;

    typedef long long LL;

    const int INF = 0x3f3f3f3f;
    const int MAXN = 10000;
    int maps[MAXN+3][MAXN+3];//点到点的距离
    int dist[MAXN+3];//所求点到源点的距离
    int pre[MAXN+3];//键对应的值,该点的上一个点为值
    bool v[MAXN+3];//标记带点是否被使用
    void Dijstra(int n, int s) {
      for(int i = 1; i <= n; i++) {//初始化
        v[i] = false;
        if(i != s) {
        dist[i] = maps[s][i];
        pre[i] = s;//i的上一个点为s
        }
      }
      dist[s] = 0; v[s] = true;//s点到s点距离为零,s点以用过
      for(int i = 1; i <= n - 1; i++) {
        int minn = INF;
        int k = 0;
        for(int j = 1; j <= n; j++) {//找出哪个点到源点的距离最小
          if(!v[j] && dist[j] < minn) {
            minn = dist[j], k =j;
          }
        }  
        if(!k) return ;
        v[k] = true;
        for(int j = 1; j <= n; j++) {//刷新与k点相邻的点到源点的距离
          if(!v[j] && maps[k][j]!=INF && dist[j] > dist[k] + maps[k][j]) {
            dist[j] = dist[k] + maps[k][j];
            pre[j] = k;
          }
        }
      }
    }
      void init(int m) {//初始化
      for(int i = 0; i < m; i++) {
        for(int j = 0; j < m; j++) {
          maps[i][j] = INF;
        }
        pre[i] = i;
      }
    }
    int main() {
      //freopen("in.txt","r",stdin);
      //freopen("out.txt","w",stdout);
      int n, m, x, y, w;
      while(cin >> n >> m) {
        init(m);
        for(int i = 0; i < m; i++) {
          cin >> x >> y >> w;
          maps[x][y] = maps[y][x] = w;
        }
        Dijstra(n,1);
        for(int i = 1; i <= n; i++)
          cout << dist[i] << endl;
      }
      return 0;
    }

     

     

  • 相关阅读:
    Qt——QLineEdit使用总结
    qt中的lineEdit文本输入框的输入类型限制(三种验证类)
    qt 创建线程
    linux 安装和卸载软件
    c 结构体中的变长数组
    Qt之QSS(QDarkStyleSheet)
    Qt之QSS(Q_PROPERTY-原始属性)
    Qt之QSS(Q_PROPERTY-自定义属性)
    Qt之QSS(白色靓丽)
    Qt之QSS(样式表语法)
  • 原文地址:https://www.cnblogs.com/creativepower/p/6640839.html
Copyright © 2020-2023  润新知