Bellman-Ford【模板】

Bellman-Ford

具体代码:

#include <iostream>
#include <cstdio>

using namespace std;

const int inf = 1e9 + 7;
const int N = 23570;

int u[N],v[N],w[N];
int dis[N],n,m,s,k; 
bool vis[N],check;

int main()
{
	scanf("%d%d%d",&n,&m,&s);
	for(int i = 1; i <= m; i ++)
		scanf("%d%d%d",&u[i],&v[i],&w[i]);
	for(int i = 1; i <= n; i ++)
		dis[i] = inf;
	dis[s] = 0;
	for(int k = 1; k < n; k ++)
	{
		check = 0;
		for(int i = 1; i <= m; i ++)
		{
			if(dis[v[i]] > dis[u[i]] + w[i])
			{
				dis[v[i]] = dis[u[i]] + w[i];
				check = 1;
			}
		}
		if(check == 0) break;
	}	
	for(int i = 1; i <= n; i ++)
		printf("%d ",dis[i]);
	return 0;
}

PS:《啊哈算法》上有详细讲解。

猜你喜欢

转载自blog.csdn.net/Mr_S_Edward/article/details/83929422