深入理解Bellman-Ford(SPFA)算法
推荐阅读原文:https://blog.csdn.net/u011893609/article/details/81232124
#include <iostream>
#include <queue>
#include <cstring>
#define inf 0x3f3f3f
using namespace std;
int a[102][102];
int dis[102];
int via[102];
int bellman_ford( int s, int n )
{
int isp;
memset(dis,inf,sizeof(dis));
for ( int i=1; i<=n; i++ ) {
isp = 0;
for ( int j=1; j<=n; j++ ) {
for ( int k=1; k<=n; k++ ) {
if ( dis[k]>dis[j]+a[j][k] ) { // 单向图
dis[k] = dis[j]+a[j][k];
isp = 1;
}
}
}
if ( isp==0 ) {
return 1; // 不存在负换
}
}
isp = 1;
for ( int j=1; j<=n; j++ ) {
for ( int k=1; k<=n; k++ ) {
if ( dis[k]>dis[j]+a[j][k] ) {
dis[k] = dis[j]+a[j][k];
isp = 0;
break;
}
}
}
return isp;
}
int main()
{
return 0;
}