zoukankan      html  css  js  c++  java
  • 最短路径

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e6+10;
    const int M=1e6+10;
    const ll inf=1e18+10;
    int head[N],ver[N],edge[N],nxt[N];
    ll d[N];
    int path[N],ans[N];
    bool v[N];
    int n,m,tot;
    priority_queue<pair<int,int> > q;
    
    void add(int x,int y,int z){
        ver[++tot]=y;edge[tot]=z;nxt[tot]=head[x];head[x]=tot;
    }
    
    void dijkstra(){
        for(int i=1;i<=n;i++) d[i]=inf;
        memset(v,0,sizeof(v));
        d[1]=0;
        q.push(make_pair(0,1));
        while(q.size()){
            int x=q.top().second;q.pop();
            if(v[x]) continue;
            v[x]=1;
            for(int i=head[x];i;i=nxt[i]){
                int y=ver[i],z=edge[i];
                if(d[y]>d[x]+z){
                    d[y]=d[x]+z;
                    path[y]=x;
                    q.push(make_pair(-d[y],y));
                }
            }
        }
    }
    
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            add(x,y,z);
            add(y,x,z);
        }
        dijkstra();
        if(d[n]==inf){
            printf("-1
    ");
        }else{
            int tmp=n;
            printf("%d ",1);
            int cnt=0;
            while(path[tmp]!=1){
                ans[++cnt]=path[tmp];
                tmp=path[tmp];
            }
            for(int i=cnt;i>=1;i--){
                printf("%d ",ans[i]);
            }
            printf("%d
    ",n);
        }
        return 0;
    }

    复制同学代码参考

  • 相关阅读:
    Python ES操作
    SVN总结
    MongoDB问题总结
    MySQL
    PyQt小工具
    Python logging模块
    shell脚本
    cmd命令
    eclipse java 项目打包
    Robot Framework:failed: Data source does not exist.错误
  • 原文地址:https://www.cnblogs.com/0211ji/p/13384932.html
Copyright © 2011-2022 走看看