zoukankan      html  css  js  c++  java
  • HDU

    题意:N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。A,B,X代表A,B间有一条权值为X的路(0<=A,B<N,A!=B,0<X<10000)
    两个整数S,T(0<=S,T<N),分别代表起点和终点。求出从S到T的最短距离,如果数据不存在则输出-1
    思路:使用优先队列存储的迪杰斯特拉算法 (模板题)

    完整代码:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <cstring>
    const int inf = 0x3f3f3f3f;
    const int max_size =  205;
    const int max_edge = 1e3+5;
    using namespace std;
    typedef pair <int,int> pi;
    int head[max_size];
    int dist[max_size];
    int top,n,m;
    struct Edge{
        int u,v,w,next;
    }edge[max_edge]; 
    void init(){
        memset(head,-1,sizeof(head));
        memset(dist,inf,sizeof(dist));
        top  =0;
    }
    void add(int a,int b,int c){    
            edge[top].next = head[a];
            edge[top].v = b;
            edge[top].u = a;
            edge[top].w = c;
            head[a] = top;
            top ++;
    }
    void dijkstra(int s,int e){
        priority_queue<pi> Q;
        Q.push(make_pair(0,s));//自身这一组刚开始为0
        dist[s] = 0;
        while(Q.size()){
            int k = Q.top().second;//找到距离最小的点 
            Q.pop();
            for(int i = head[k];~i;i = edge[i].next){
                if(dist[edge[i].v] > dist[k]+edge[i].w){
                    dist[edge[i].v] = dist[k] + edge[i].w;
                    Q.push(make_pair(-dist[edge[i].v],edge[i].v));
                    //由于queue是默认递增序列,所以每次取top即使取负数最大非负数最小的点 
                }
            }
        }     
    }
    
    int main(){
        while(cin>>n>>m){
            init(); 
            for(int i=0;i<m;i++){
                int a,b,c;
                cin>>a>>b>>c;
                add(a,b,c);
                add(b,a,c);
            }
            int s,e;
            cin>>s>>e;
            dijkstra(s,e);
            if(dist[e]!=inf) cout<<dist[e]<<endl;
            else cout<<-1<<endl;
        }
    } 
  • 相关阅读:
    android 6.0 以上在doze模式精确定时
    MySQL 性能优化神器 Explain 使用分析
    android java层通过jni加载使用第三方的so库
    android 抓取native层奔溃
    mybatis面试入门
    Python实现异步 io多种方式
    可用率map处理
    雷哥带你走进Javascript
    前端存储技术
    听雷哥浅谈Redis
  • 原文地址:https://www.cnblogs.com/Tianwell/p/11281206.html
Copyright © 2011-2022 走看看