ADD file via upload

master
pgftvecou 3 years ago
parent 81da6c2478
commit a2b13f5471

@ -0,0 +1,52 @@
#include <vector>
#include <stdio.h>
#define INF 0x3f3f3f3f //定义∞
#define MAXV 101
int A[MAXV][MAXV]; //邻接矩阵
int n, m;
int s, t;
int dist[MAXV];
void BellmanFord(int v) //贝尔曼-福特算法
{
int i, k, u;
for (i = 0; i < n; i++)
dist[i] = A[v][i]; //对dist0[i]初始化
for (k = 1; k < n; k++) //从dist0[u]递推出dist2[u], …,distn-1[u]循环n-2次
{
for (u = 0; u < n; u++) //修改所有非顶点v的dist[]值
{
if (u != v)
{
for (i = 0; i < n; i++)
{
if (A[i][u]<INF && dist[u]>dist[i] + A[i][u])
dist[u] = dist[i] + A[i][u];
}
}
}
}
}
int main()
{
int i, j;
int a, b, l;
scanf("%d%d", &n, &m); //输入n、m
for (i = 0; i < n; i++) //初始化邻接矩阵
for (j = 0; j < n; j++)
if (i == j)
A[i][j] = 0;
else
A[i][j] = INF;
for (i = 0; i < m; i++) //输入边
{
scanf("%d%d%d", &a, &b, &l);
A[a][b] = -l;
}
scanf("%d%d", &s, &t); //输入s和t
BellmanFord(s); //采用BellmanFord算法求s出发的最短路径
printf("%d\n", -dist[t]); //输出结果
return 1;
}
Loading…
Cancel
Save