USACO3.2.6多源最短路径和SPFA实现
2011-02-15 21:52
134 查看
枚举起点n,用SPFA求最短路,然后求和,算出路径和最小点即可
View Code
View Code
#include<iostream> #include<queue> using namespace std; const int maxn=99999999; const int edge_maxn = 3000; const int point_maxn = 805; int m,cown,mina; struct node { int v; int w; int next; }edge[edge_maxn]; int pre[point_maxn]; int n; queue<int>Q; int dirs[point_maxn],cow[edge_maxn]; bool vis[point_maxn]; void Init() { memset(pre,-1,sizeof(pre)); memset(cow,0,sizeof(cow)); int x,y,z,temp; int index=1; int i; for(i=1;i<=cown;i++) { scanf("%d",&temp); cow[temp]++; } for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); edge[index].v=y; edge[index].w=z; edge[index].next=pre[x]; pre[x]=index++; swap(x,y); edge[index].v=y; edge[index].w=z; edge[index].next=pre[x]; pre[x]=index++; } } void SPFA(int mu) { int start,i; start=mu; while(!Q.empty()) { Q.pop(); } memset(vis,0,sizeof(vis)); //fill(dirs,dirs+point_maxn,maxn); for(i=1;i<=n;i++) dirs[i]=99999999; dirs[start]=0; vis[start]=1; Q.push(start); while(!Q.empty()) { int top=Q.front(); Q.pop(); vis[top]=0; for(int j=pre[top];j!=-1;j=edge[j].next) { int e=edge[j].v; if(dirs[e]>edge[j].w+dirs[top]) { dirs[e]=edge[j].w+dirs[top]; if(!vis[e]) { Q.push(e); vis[e]=1; } } } } int add=0; for(i=1;i<=n;i++) { if(start!=i) add+=cow[i]*dirs[i]; } if(mina>add) mina=add; } int main() { int i; while(scanf("%d%d%d",&cown,&n,&m)!=EOF && (n!=0 || m!=0)) { mina=9999999; Init(); for(i=1;i<=n;i++) { SPFA(i); } printf("%d\n",mina); } return 0; }
相关文章推荐
- 最短路径算法—SPFA(Shortest Path Faster Algorithm)算法分析与实现
- 最短路径算法—SPFA(Shortest Path Faster Algorithm)算法分析与实现(C/C++)
- HUD3790最短路径问题(SPFA实现)
- 【原】单源最短路径快速算法(spfa)的python3.x实现
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- 图论-最短路径-spfa两种实现方式-poj3259
- 最短路径算法比较(Dijkstra、Bellman-Ford、SPFA)及实现(Java)
- 最短路径算法Dijkstra && SPFA && Floyd 代码实现模板
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- 最短路径算法—SPFA(Shortest Path Faster Algorithm)算法分析与实现(C/C++)
- 最短路径:Dijkstra,Bellman,SPFA,Floyd算法的实现
- Java实现Dijkstra单源最短路径
- 云计算期末报告无图 kmeans和最短路径算法hadoop实现详解
- 利用MPI求解全源最短路径的并行算法实现
- dijkstra最短路径算法C实现
- Floyed多源节点--最短路径C++实现与实现打印路径
- 最短路径算法—Bellman-Ford(贝尔曼-福特)算法分析与实现(C/C++)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- HDU3790 最短路径问题(双重权值+spfa)
- 增加回溯的最短路径算法的matlab实现