zoukankan      html  css  js  c++  java
  • 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;
    }

     

     

  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/creativepower/p/6640839.html
Copyright © 2011-2022 走看看