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;
}