今天看啊哈算法搞懂了Bellman-ford算法,其实核心代码只有四行,还是蛮简单的,写了一个板子,代码分析容后再议
(我才不是想水博客呢……)
#include <iostream>
#define MAXN 501
#define INF 1e7
using namespace std;
int n,m,start,end;//点数,边数,起点,终点
int map[MAXN][MAXN];
int vis[MAXN];
int u[MAXN],v[MAXN],w[MAXN];
void bellmanford(){
for(int i = 0; i < n - 1; i++){//遍历点 - 1
for(int j = 0; j < m; j++){//遍历边
if(vis[v[j]] > vis[u[j]] + w[j])
vis[v[j]] = vis[u[j]] + w[j];
}
}
}
int main(){
int x,y,dis;
cin>>n>>m;//>>start>>end;//输入图的信息
for(int i = 0; i < m; i++){
cin>>u[i]>>v[i]>>w[i];
}
for(int i = 0; i < n; i++){//初始化vis数组
vis[i] = INF;
}
vis[0] = 0;
bellmanford();//放大招
for(int i = 0; i < n; i++){//输出
cout<<vis[i]<<" ";
}
return 0;
}