SPFA 算法
原理:法是求单源最短路径的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法。
#include
#include
using namespace std;
#define N 10005
vector a[N];
vector value[N];
int vist[N] = { 0 };//创建访问标志位
int sum = 0;
int MIN = 999999999;
void SPFA(int s, int end)
{
if (s == end)
{
if (sum < MIN)
MIN = sum;//找出最小的带权路径
return;
}
for (int i = 0; i < a[s].size(); i++)
{
if (vist[a[s][i]] != 1)
{
vist[a[s][i]] = 1;
sum += value[s][i];
SPFA(a[s][i], end); //回溯每一个不同路径
vist[a[s][i]] = 0;
sum -= value[s][i];
}
}
}
int main()
{
int n, m;
int begin, end;
cin >> n >> m;
cin >> begin >> end;
while (m--)
{
int u, v, w;
cin >> u >> v >> w;
a[u].push_back(v);//存储图中结点与结点的连接关系
value[u].push_back(w);
}
SPFA(begin, end);
cout << MIN << endl;
return 0;
}