zoukankan      html  css  js  c++  java
  • 有边数限制的最短路(Bellman_Ford)

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int N=510,M=10010;
    struct Edge{
        int a;
        int b;
        int w;
    }e[M];//把每个边保存下来即可
    int dist[N];
    int back[N];//备份数组放置串联
    int n,m,k;//k代表最短路径最多包涵k条边
    
    int bellman_ford(){
        memset(dist,0x3f,sizeof dist);
        dist[1]=0;
        for(int i=0;i<k;i++){//k次循环
            memcpy(back,dist,sizeof dist);
            /*
               back[]数组是上一次迭代后dist[]数组的备份,由于是每个点同时向外出发,
            因此需要对dist[]数组进行备份,若不进行备份会因此发生串联效应,影响到下一个点*/
            for(int j=0;j<m;j++){//遍历所有边
                int a=e[j].a,b=e[j].b,w=e[j].w;
                dist[b]=min(dist[b],back[a]+w);//使用backup:避免给a更新后立马更新b,这样b一次性最短路径就多了两条边出来
            }
        }
        if(dist[n]>0x3f3f3f3f/2) return -1;
        else return dist[n];
    
    }
    
    int main(){
        scanf("%d%d%d",&n,&m,&k);
        for(int i=0;i<m;i++){
            int a,b,w;
            scanf("%d%d%d",&a,&b,&w);
            e[i]={a,b,w};
        }
        int res=bellman_ford();
        if(res==-1) puts("impossible");
        else cout<<res;
        return 0;
    }
    View Code
  • 相关阅读:
    软件测试学习随笔(1) 引言
    集成测试
    SPM-using Maven and Juint
    验收测试
    白盒测试学习
    编码的UI测试
    测试闰年
    黑盒测试续
    黑盒测试方法-等价类划分
    对软件测试的理解
  • 原文地址:https://www.cnblogs.com/sszywq/p/13938939.html
Copyright © 2011-2022 走看看