数据来源:
视频:最短路径(二)Bellman-Ford算法_哔哩哔哩_bilibili
#include <iostream>
#define INF 0x7fffffff
using namespace std;
//Bellman-Ford
//计算从0点到其他点最短距离,边的权值可为负值
typedef struct node {
int a, b, w; // a点到b点的权值是w
} Edge;
Edge edge[10];
int dis[10] = { 0 };
int pre[10] = { 0 };
void bellman_ford(int k) {
int num = k;
while (num--) {
for (int i = 0; i < k; i++) {
int a = edge[i].a;
int b = edge[i].b;
int w = edge[i].w;
if (dis[a] + w < dis[b]) {
dis[b] = dis[a] + w;
pre[b] = a;
}
}
}
return;
}
int main() {
{
edge[0].a = 0, edge[0].b = 1, edge[0].w = 90;
edge[1].a = 0, edge[1].b = 3, edge[1].w = 80;
edge[2].a = 0, edge[2].b = 4, edge[2].w = 75;
edge[3].a = 1, edge[3].b = 2, edge[3].w = -30;
edge[4].a = 2, edge[4].b = 4, edge[4].w = 10;
edge[5].a = 3, edge[5].b = 2, edge[5].w = -30;
edge[6].a = 3, edge[6].b = 4, edge[6].w = 10;
}
for (int i = 1; i <= 4; i++) dis[i] = INF;
bellman_ford(7);
for (int i = 0; i < 5; i++) cout << dis[i] << " ";
cout << endl;
for (int i = 0; i < 5; i++) cout << pre[i] << " ";
return 0;
}
可以看到输出和视频中老师讲的一样