看了一些大佬的解答,还是不太明白为什么要备份数组,模拟了一下好像明白了,思考了一下午,我真是太愚蠢了。
code
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 510, M = 10010, INF = 0x3f3f3f3f;
int n, m, k;
int dist[N];
int backup[N]; // 备份数组,防止串联
struct Edges{
int a, b, w;
}edges[M];
int bellman_ford()
{
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
for (int i = 0; i < k; i ++ )
{
memcpy(backup, dist, sizeof dist);
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);
}
}
if (dist[n] > INF / 2) return INF;
else return dist[n];
}
int main()
{
cin >> n >> m >> k;
for (int i = 0; i < m; i ++ )
{
int a, b, w;
cin >> a >> b >> w;
edges[i] = {a, b, w};
}
int t = bellman_ford();
if (t == INF) puts("impossible");
else cout << t << endl;
return 0;
}
大佬,图借我用一下
想问一下上面的图片是那一本书
你这个是我看写的2最清楚的
第二次迭代的3:那个不应该是大于吗
这个大于号小于号是不是写反了
借图
大佬太强了,图借我用用哈
这笔记使用IPad做的吗~
是滴~ipad+notability
好评!!
谢谢大佬!!!