#include<iostream>
using namespace std;
#define N 1000
#define INF 0x3f3f3f3f
int dis[N];
struct node
{
int a;
int b;
int v;
}mp[N];
bool Bellman_ford(int n)
{
int i, j, k;
for (i = 1; i <= n; i++)
{
dis[i] = INF;
}
dis[1] = 0;
k = n;
int ans=0;
int g;
while (k--)
{
ans++;
bool t = false;
for (i = 1; i <= n; i++)
{
if(dis[mp[i].b] > dis[mp[i].a] + mp[i].v)
{
dis[mp[i].b] = dis[mp[i].a] + mp[i].v;
t = true;
}
}
if (t == false)
return false;
cout << "第" << ans << "执行之后的dis数组:" << endl;
for (g = 0; g <= n; g++)
{
cout << dis[g] << "\t";
}
cout << endl;
}
for (i = 1; i <= n; i++)
{
if (dis[mp[i].b] > dis[mp[i].a] + mp[i].v)
{
return true;
}
}
return false;
}
int main()
{
int n, m, w;
cin >> n >> m >> w;
int i, j,k;
for (i = 1; i <= m; i++)
{
int a, b, c;
cin >> a >> b >> c;
mp[i].a = a;
mp[i].b = b;
mp[i].v = c;
}
m++;
for (j = 1; j <= w; j++)
{
int a, b, c;
cin >> a >> b >> c;
int d = -c;
mp[m].a = a;
mp[m].b = b;
mp[m].v = d;
m++;
}
if (Bellman_ford(n))
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
最短路径之Bellman_ford算法(结构体存图)
最新推荐文章于 2024-02-22 23:33:00 发布