Bellman-Ford算法用于解决有边数限制的最短路问题,且可以应对有负边权的图
其时间复杂度为O(nm),效率较低
代码实现:
#include<iostream>
#include<cstring>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
const int N=1e4+10;
const int M=510;
int m,n,k,dis[M],backup[M];
//m条边,n个点,在1号点到n号点之间找到一条经过小于等于k条边的通路
//dis:各点到源点的距离,backup:备份
struct Node
{
int x,y,v;
}edge[N];//可以直接用结构体存边
int Bellman_Ford()
{
memset(dis,0x3f,sizeof dis);
dis[1]=0;
for(int i=1;i<=k;i++)
{
memcpy(backup,dis,sizeof dis);
for(int j=1;j<=m;j++)
{
Node t=edge[j];
dis[t.y]=min(dis[t.y],backup[t.x]+t.v);
}
}
if(dis[n]>inf/2) return -1;
return dis[n];
}
int main()
{
cin>>n>>m>>k;
for(i