最短路径之SPFA算法
2010-10-11 21:47
387 查看
写得很傻……
队列优化的BellmanFord算法
空间浪费很大,没用邻接表存储,写得很丑,将就着看吧
Code:
队列优化的BellmanFord算法
空间浪费很大,没用邻接表存储,写得很丑,将就着看吧
Code:
#include<iostream> #include<string> using namespace std; const int oo=2500;//最大的路径值 const int Max_Node=2501;//最大边的条数 int n,m;//n点 m边 int *D; int *queue; int begin; struct bian { int a,b;//边的出发点和结束点 int w;//权值 }*E;//边集 struct node { int arc[Max_Node];//每条以该定点为出发点的编号 int num;//以该点为出发点的边的数量 }*V;//点集 int input() { int i; cin>>n>>m>>begin; V=new node[n+1]; E=new bian[m+1]; int a,b,w; for (int i=1;i<=m;i++) { cin>>a>>b>>w; E[i].a=a; E[i].b=b; E[i].w=w; V[a].arc[++V[a].num]=i; } D=new int[n+1]; memset(D,oo,sizeof(int)*(n+1)); D[begin]=0; return 0; } int spfa() { int front=0; int rear=1; queue=new int[2*n+1]; memset(queue,0,sizeof(int)*(2*n+1)); queue[front]=begin; while(front!=rear) { for (int i=1;i<=V[queue[front]].num;i++) { if (D[queue[front]]+E[V[queue[front]].arc[i]].w<=D[E[V[queue[front]].arc[i]].b]) { queue[rear++]=E[V[queue[front]].arc[i]].b;//入队 D[E[V[queue[front]].arc[i]].b]=D[queue[front]]+E[V[queue[front]].arc[i]].w;//松弛 } } front++;//出队 } return 0; } int main() { input(); spfa(); for (int i=1;i<=n;i++) { cout<<D[i]; } system("pause"); return 0; }
相关文章推荐
- hdu 3790(最短路径问题 SPFA算法)
- 最短路径:我的理解--SPFA算法
- SPFA算法(最短路径)
- 最短路径之spfa算法
- hiho刷题日记——第二十五天最短路径·三:SPFA算法
- spfa算法——最短路径算法
- 【最短路径】:Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法
- hdu 3790(最短路径问题 SPFA算法)
- 最短路径:我的理解--SPFA算法
- 蓝桥杯--算法练习:最短路(单源最短路径spfa算法)
- WUST 1935 香甜的黄油(最短路径+SPFA算法)
- 最短路径:我的理解--SPFA算法
- 最短路径算法----Bellman-ford和SPFA算法
- SPFA算法(求最短路径)
- 最短路径问题 SPFA算法
- SPFA算法 快速Bellaman-ford算法 源点最短路径
- 最短路径:我的理解--SPFA算法
- 最短路径——SPFA算法
- hihoCoder#1093 最短路径·三:SPFA算法
- 最短路径·三:SPFA算法 HihoCoder - 1093 (spfa无向图)