zoukankan      html  css  js  c++  java
  • 做了一道跑大数据的最短路挂了,基于vector的二维模拟邻接表实现Dijkstra算法(*【模板】)

    代码:

         

    #include <stdio.h>
    #include <string.h>
    #include <string>
    #include <vector>
    #include <algorithm>
    #define INF 2100000000
    
    using namespace std;
    int n;
    struct node
    {
        int dd;
        int w;
    }t;
    vector<node>q[500001];
    unsigned int dis[500001];
    bool vis[500001];
    
    void Dijkstra(int s, int e)
    {
    
        int i, j;
        memset(vis, false, sizeof(vis));
    
        for(i=0; i<=n; i++)
        {
            dis[i] = INF;
        }
    
        int len=q[s].size();
        for(i=0; i<len; i++)
        {
            if(q[s][i].w < dis[q[s][i].dd] )
                dis[q[s][i].dd]=q[s][i].w; //从起点开始的dis数组更新
        }
        vis[s]=true;
    
        for(int k=0; k<n-1; k++)
        {
            int pos, mm=INF;
            for(i=1; i<=n; i++)
            {
                if( !vis[i] && dis[i]<mm )
                {//当前节点未被访问过且权值较小
                    mm=dis[i]; pos=i;
                }
            }
            vis[pos]=true;
    
            //再次更新dis数组
            len=q[pos].size();
            for(j=0; j<len; j++)
            {
                if( !vis[q[pos][j].dd] && dis[ q[pos][j].dd ]>q[pos][j].w+dis[pos] )
                    dis[q[pos][j].dd ] = q[pos][j].w + dis[pos];
            }
        }
        printf("%d
    ", dis[e] );
    }
    
    
    int main()
    {
        int m;
        int i;
        int u,v, w;
        int s, e;
    
        while(scanf("%d %d", &n, &m)!=EOF)
        {
            for(i=0; i<=n; i++)
                q[i].clear();
            for(i=0; i<m; i++)
            {
                scanf("%d %d %d", &u, &v, &w);
                t.dd=v; t.w=w;
                q[u].push_back(t);
                t.dd=u; t.w=w;
                q[v].push_back(t);
            }
            scanf("%d %d", &s, &e);
            Dijkstra(s, e);
        }
        return 0;
    }
    
  • 相关阅读:
    1436 孪生素数 2
    1702 素数判定 2
    第五章 Spring3.0 、Hibernate3.3与Struts2的整合 基于Annotation
    逻辑服务器和数据缓存服务器交互方式整理
    Solr学习(2) Solr4.2.0+IK Analyzer 2012
    hdu4288 Coder
    解决Robotium测试用例crash问题
    FineUI_动态绑定Grid
    Protection 5 ---- Priviliege Level Checking 2
    用户权限管理
  • 原文地址:https://www.cnblogs.com/yspworld/p/4242671.html
Copyright © 2011-2022 走看看