• tzoj5779 最短路(SPFA模板)


    时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

    描述

    给定 M 条边, N 个点的带权无向图。求 1到 N 的最短路。

    输入

    第一行:N,M(N≤100000,M≤500000);

    接下来M行3个正整数:ai,bi,ci表示ai,bi之间有一条长度为ci的路,ci≤1000。

    输出

    一个整数,表示 1 到 N 的最短距离。

    样例输入

    4 4
    1 2 1
    2 3 1
    3 4 1
    2 4 1

    样例输出

     2

     

    提示

    注意图中可能有重边和自环,数据保证 1 到 N 有路径相连。

    SPFA算法原理参考

    算法优点:

    1.时间复杂度比普通的Dijkstra和Ford低

    2.能够计算负权图问题

    3.能够判断是否有负环 (即:每跑一圈,路径会减小,所以会一直循环跑下去)

     1 #include <cstdio>
     2 #include <vector>
     3 #include <queue>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int N=1e5+5,INF=0x3f3f3f3f;
     8 struct Node{
     9     int to,d;
    10 };
    11 int dst[N],vis[N];
    12 vector<Node> g[N];
    13 
    14 void SPFA(int u){
    15     queue<int> que;
    16     memset(vis,0,sizeof vis);
    17     memset(dst,INF,sizeof dst);
    18     dst[u]=0,vis[u]=1;
    19     que.push(u);
    20     while(!que.empty()){
    21         int f=que.front();
    22         que.pop();
    23         vis[f]=0;
    24         int len=g[f].size();
    25         for(int i=0;i<len;i++){
    26             Node v=g[f][i];
    27             if(v.d+dst[f]<dst[v.to]){
    28                 dst[v.to]=v.d+dst[f];
    29                 if(vis[v.to]==0){
    30                     que.push(v.to);
    31                     vis[v.to]=1;
    32                 }
    33             }
    34         }
    35     }
    36 }
    37 
    38 int main(){
    39     int n,m,a,b,c;
    40     Node node;
    41     scanf("%d%d",&n,&m);
    42     while(m--){
    43         scanf("%d%d%d",&a,&b,&c);
    44         node.to=b,node.d=c;
    45         g[a].push_back(node);
    46         node.to=a,node.d=c;
    47         g[b].push_back(node);
    48     }
    49     SPFA(1);
    50     printf("%d
    ",dst[n]);
    51 }
  • 相关阅读:
    dynamic load jar and init spring
    maven-assembly-plugin
    URL to load resources from the classpath in Java
    maven plugins
    URL加载jar
    spring自定义xml标签&自定义注解
    有序表查找---插值查找
    有序表查找---折半查找算法
    基本查找算法---顺序表查找
    图的基础---关键路径理解和实现(Java)
  • 原文地址:https://www.cnblogs.com/ChangeG1824/p/11455105.html
Copyright © 2020-2023  润新知