前言
最近几天,学习完了一些最短路径算法,由于学习路程艰难曲折,所以写下了这篇博客来总结一下
———————————————————————————————————————————————————————————
正文
floyd
首先,提到最短路径算法,最好写的肯定是Floyd算法,如果图的点数没有超过300的话,一般的题目还是能卡过去的
floyd算法,主要是通过枚举中转点(其实就是每个点),对全图都实现松弛操作,其实本质还是dp的思路,由于其较为简单,此处便不再进行的过多的讲解
附上代码:
void floyd()
{
for (int k=1; k<=n; k++)
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);//dist[i][j]数组表示全图中i,j两点的距离;松弛操作
}
floyd其实还可以寻找最小环,只需将dist数组初始化时改为无穷大,dist[i][i]设为无穷大,当跑完floyd时,
扫一遍,min=min(dist[i][i],min);即可
spfa(Shortest Path Faster Algorithm)
关于spfa———它死了
如果经(shen