SDUT 2894 最短路(SPFA or Bleman)
2014-11-29 20:49
399 查看
2013级的数据结构实验已延期,请大家认真独立的完成收件箱(0)注销
C
Time Limit: 7000ms Memory limit: 65536K 有疑问?点这里^_^题目描述
给出一个带权无向图,包含n个点,m条边。求出s,e的最短路。保证最短路存在。输入
多组输入。对于每组数据。第一行输入n,m(1<= n && n<=5*10^5,1 <= m && m <= 2*10^6)。接下来m行,每行三个整数,u,v,w,表示u,v之间有一条权值为w(w >= 0)的边。最后输入s,e。输出
对于每组数据输出一个整数代表答案。示例输入
3 1 1 2 3 1 2
示例输出
3
点,边都很多,要注意范围,数组开小了,错了好几遍,sad。。。
SPFA
#include <iostream>#include <stdlib.h>#include <queue>#include <cstring>#include <cstdio>using namespace std;const int MAX = 9999999;const int N = 500010;int n,m,cnt;int head; int v,b;struct node{ int v,w; int next;} q[5000100];void add(int u,int v,int w){ q[cnt].v=v; q[cnt].w=w; q[cnt].next=head[u]; head[u]=cnt++;}void SPFA(int s,int e){ memset(v,MAX,sizeof(v)); memset(b,0,sizeof(b)); b[s]=1; v[s]=0; queue<int >a; a.push(s); while(!a.empty()) { int t=a.front(); a.pop(); b[t]=0; for(int i=head[t]; i!=-1; i=q[i].next) { if(v[q[i].v] > v[t] + q[i].w) { v[q[i].v]=v[t] + q[i].w; if(!b[q[i].v]) { b[q[i].v]=1; a.push(q[i].v); } } } } printf("%d\n",v[e]);}int main(){ while(~scanf("%d%d",&n,&m)) { cnt=0; memset(head,-1,sizeof(head)); for(int i=0; i<m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); } int s,e; scanf("%d%d",&s,&e); SPFA(s,e); } return 0;}Bellman
#include <iostream>#include <stdlib.h>#include <queue>#include <cstring>#include <cstdio>using namespace std;const int MAX = 9999999;const int N = 500010;int n,m,cnt;int head; int v,b;struct node{ int u,v,w;}q[5000010];void add(int u,int v,int w){ q[cnt].u=u; q[cnt].v=v; q[cnt++].w=w;}void Bellman(int s,int e){ memset(v,MAX,sizeof(v)); v[s]=0; for(int i=1;i<n;i++) { int flag=1; for(int j=0;j<cnt;j++) { if(v[q[j].v] > v[q[j].u] +q[j].w) { v[q[j].v] = v[q[j].u] +q[j].w; flag=0; } } if(flag) break; } printf("%d\n",v[e]);}int main(){ while(~scanf("%d%d",&n,&m)) { cnt=0; memset(head,-1,sizeof(head)); for(int i=0; i<m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); } int s,e; scanf("%d%d",&s,&e); Bellman(s,e); } return 0;}
相关文章推荐
- SDUT 2894-C(最短路spfa)
- hdu 0 or 1(最短路spfa)(本质,抽象)
- sdut3562-求字典序最小的最短路 按顶点排序后spfa的反例
- SDUT2493 Constructing Roads(最短路,spfa)
- hdu 0 or 1(最短路spfa)(本质,抽象)
- (模板题)sdut 2143 图结构练习——最短路径(SPFA求最短路)
- 0 or 1 图论最短路spfa
- hdu 0 or 1(最短路spfa)(本质,抽象)
- HDU 4370 0 or 1(巧妙思路转化,0/1规划,最短路SPFA)
- SDUT 2894-C(最短spfa)
- hdu 0 or 1(最短路spfa)(本质,抽象)
- SPFA or bellman ford松弛法--单源最短路
- hdu 0 or 1(最短路spfa)(本质,抽象)
- SDUT 3262 Circle of Friends【强连通Tarjan+缩点染色+最短路SPFA】
- hdu 0 or 1(最短路spfa)(本质,抽象)
- poj 2267 From Dusk till Dawn or: Vladimir the Vampire 最短路spfa
- hdu 0 or 1(最短路spfa)(本质,抽象)
- hdu 0 or 1(最短路spfa)(本质,抽象)
- HDU 2544 最短路(dijkstra or Floyd or bellman or spfa )
- hdu 0 or 1(最短路spfa)(本质,抽象)