bellman
  • 板块学术版
  • 楼主z343151536
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/11 20:26
  • 上次更新2024/8/11 21:11:18
查看原帖
bellman
1292923
z343151536楼主2024/8/11 20:26
#include <bits/stdc++.h>
using namespace std;

const int N=510,M=10010,INF=1e9;
int n,m,k;
int dist[N],backup[N]; 

struct Edge{
    int a,b,w;
}edges[M];


int bellman_ford(){
    for(int i=1;i<=n;i++)
        dist[i]=INF;
    dist[1]=0;
    for(int i=0;i<k;i++){ //k 次 
        memcpy(backup,dist,sizeof dist); //?备份dist 数组到backup数组 
        for(int j=0;j<m;j++){
            int a=edges[j].a,b=edges[j].b,w=edges[j].w;
            dist[b]=min(dist[b],backup[a]+w);// 不是 dist[a]+w
        }
    }
    if(dist[n]>9e8)return INF; // 
    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);
        edges[i]={a,b,w};
    }
    int t=bellman_ford();
    if(t==INF)puts("impossible");
    else printf("%d\n",t);
    
    return 0;
}
2024/8/11 20:26
加载中...