https://www.acwing.com/problem/content/description/855/

bf算法:迭代n次(边数限制为n)
		每次	枚举所有边(要backup数组,防止串联)
#include<bits/stdc++.h>
using namespace std;
const int N=11111;
int n,m,k;
struct node{
    int x,y,z;
};
node edges[N];
int dis[N],backup[N];

int bf(){
    memset(dis,0x3f,sizeof dis);
    dis[1]=0;
    for(int i=0;i<k;i++){
        memcpy(backup,dis,sizeof dis);
        for(int j=0;j<m;j++){
            int a=edges[j].x,b=edges[j].y,w=edges[j].z;
            dis[b]=min(dis[b],backup[a]+w);
        }
    }
    if(dis[n]>=0x3f3f3f3f/2) return -1;
    return dis[n];
}

int main(){
    cin>>n>>m>>k;
    for(int i=0;i<m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        edges[i]={x,y,z};
    }
    int t=bf();
    if(t==-1) cout<<"impossible"<<endl;
    else cout<<t<<endl;
    return 0;
}

 posted on 2019-08-22 11:40  谁是凶手1703  阅读(95)  评论(0)    收藏  举报