最短路径(未完成)
来源:互联网 发布:小米怎么看网络制式 编辑:程序博客网 时间:2024/05/21 11:01
简称 Floyed(弗洛伊德)算法,时间复杂度为O(n^3),是最简单的最短路径算法。适用于出现负权值的情况。
算法描述:
(1)初始化:假如u,v两条边有相连的情况,那么dis [ u ] [ v ] =dis [ v ] [ u ] =w [ u ] [ v ] ;
(2)for k=1 to n
for i=1 to n
for j=1 to n
假如 i , j , k 互不相等 && dis[ i ] [ j ] > dis[ i ] [ k ] + dis[ j ] [ k ]
dis[ i ] [ j ] = dis[ i ] [ k ] + dis[ j ] [ k ];
(3)输出dis[ s ] [ e ];
程序:
2.Dijkestra 算法
时间复杂度O(n^2),是一种单源最短路径。不适用于出现负权值的情况。
设起点为s,dis [ v ]为s,v的最短路径
算法描述:
(1)初始化:dis [ v ] = ∞,dis [ s ] = 0;
(2)for i=1 to n
for u,v
查找可以更新的点,记为k。
for j=1 to n
dis [ k ] + w [ k ] [ j ] < dis [ j ]
更新节点;
(3)算法结束,dis [ e ]为s,e的最短路;
程序:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
const int Maxx= 1 << 28;
double f[101][101];
int a[101][2];
double c[101];
bool b[101];
int i,j,n,m,s,e,minl,k,x,y;
int main()
{
/*输入:可更改*/
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d%d",&a[i][0],&a[i][1]);
for(i=1;i<=n;i++) for(j=1;j<=n;j++) f[i][j]=Maxx;
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
f[x][y]=f[y][x]=
sqrt ( pow ( double (a[x][0]-a[y][0]) ,2) + pow ( double ( a[x][1]-a[y][1]) ,2) );
}
scanf("%d%d",&s,&e);
for(i=1;i<=n;i++) c[i]=f[s][i];
/*输入结束*/
memset(b,0,sizeof(b));
b[s]=1; c[s]=0;
for(i=1;i<n;i++)
{
k=0; minl=Maxx;
for(j=1; j<=n ;j++)
if(!b[j] && (c[j]<minl))
{
k=j;
minl=c[j];
}
if(k==0) break;
b[k]=1;
for(j=1;j<=n;j++)
if(f[k][j]+c[k]<c[j]) c[j]=f[k][j]+c[k];
}
printf("%.2f",c[e]);
return 0;
}
3.Bellman-Ford 算法
- 最短路径(未完成)
- 最短路径整理(未完成)
- 16.最短路径 (25分)(未完成)
- 最短路径算法研究未完成的算法
- hdoj3790_最短路径问题(最短路径)
- 最短路径问题(最短路径)
- 最短路径(java)
- 最短路径 (yp)
- HDU1874(最短路径)
- POJ2387(最短路径)
- 图(最短路径)
- 迪杰斯特拉(最短路径)
- 最短路径(Dijkstra)
- HDU3665Seaside(最短路径)
- 最短路径(Dijkstra)
- zoj2750(最短路径)
- dijkstra(最短路径)
- 最短路径(迪杰斯特拉)
- Spring MVC之——前后台传值
- 最小生成树
- 拓扑排序
- Noip2015普及组第四题 Salesman的解题报告
- Android 中的 Service 全面总结
- 最短路径(未完成)
- 树状数组
- 线段树
- 最长不下降子序列
- iOS Keychain (钥匙串)简单封装
- 欢迎使用CSDN-markdown编辑器
- 逆序对
- 二叉堆
- USACO 2016 JAN——Angry Cows套题的解题报告