hiho刷题日记——第二十五天最短路径·三:SPFA算法
2015-11-29 19:38
411 查看
题目
图中节点的数量级上升至十万,路的数量级上升至百万。思路
和我之前在一中写的相似。只是从深度优先改为了广度优先。代码
#include<cstdio> #include<cstring> using namespace std; const int MAXN=100000+1; const int MAXM=1000000+1; int N,M,S,T,head[MAXN],queue[MAXM],front=0,rear=0,e=0; int ans[MAXN]; struct EDGE { int v,next,cost; }edge[MAXM<<1]; void addEdge(int x,int y,int z) { edge[e].v=y; edge[e].cost=z; edge[e].next=head[x]; head[x]=e++; } void bfs(int x) { queue[rear++]=x; while(front<rear) { x=queue[front++]; for(int p=head[x];p!=-1;p=edge[p].next) if(ans[edge[p].v]==-1 || ans[x]+edge[p].cost<ans[edge[p].v]) { ans[edge[p].v]=ans[x]+edge[p].cost; queue[rear++]=edge[p].v; } } } int main() { memset(head,-1,sizeof(head)); memset(ans,-1,sizeof(ans)); scanf("%d%d%d%d",&N,&M,&S,&T); int a,b,c; while(M--) { scanf("%d%d%d",&a,&b,&c); addEdge(a,b,c); addEdge(b,a,c); } ans[S]=0; bfs(S); printf("%d",ans[T]); return 0; }
相关文章推荐
- FlowDroid在Ubuntu上正确使用姿势
- 【HDU5587 BestCoder Round 64 (div1)B】【迭代 前缀和思想】Array 前m个数的二进制中共有多少个1
- Android-Android6.0新特性-略讲1
- hdu 计算机学院大学生程序设计竞赛(2015’11)投币洗衣机
- mysql循环结构
- hdu 计算机学院大学生程序设计竞赛(2015’11)搬砖
- IE和ff的兼容技巧
- 使用SpringMVC+Java mail发送HTML邮件
- 4.2.6特殊运算符:is运算符;条件运算符;new运算符;typeof运算符
- kettle学习:JsonInput使用
- 黑马程序员——Java基础---IO流
- 表格边框总结
- HDU 5584 LCM Walk(逆推)——2015ACM/ICPC亚洲区上海站
- Filter 解决web网页跳转乱码
- 页面跳转的五种方法
- 数据迁移后的迁移结果比对方法
- 基于struts2的文件上传
- Linux进程的创建
- 支持向量机
- 20135231 —— 第十一周任务总结报告