poj2387 最短路
2015-07-20 23:50
204 查看
题意:给出一堆双向路,求从N点到1点的最短路径,最裸的最短路径,建完边之后直接跑dij或者spfa就行
dij:
spfa
dij:
#include<stdio.h> #include<string.h> #include<queue> using namespace std; int head[1005],dist[1005],next[4005],point[4005],val[4005],size; bool vis[1005]; void add(int a,int b,int v){ int i; for(i=head[a];~i;i=next[i]){ if(point[i]==b){ if(val[i]>v)val[i]=v; return; } } point[size]=b; val[size]=v; next[size]=head[a]; head[a]=size++; } void spfa(int s,int p){ memset(vis,0,sizeof(vis)); memset(dist,-1,sizeof(dist)); queue<int>q; vis[s]=1; dist[s]=0; q.push(s); while(!q.empty()){ int i,t=q.front(); vis[t]=0; q.pop(); for(i=head[t];~i;i=next[i]){ int j=point[i]; if(dist[j]==-1||dist[j]>dist[t]+val[i]){ dist[j]=dist[t]+val[i]; if(!vis[j]){ q.push(j); vis[j]=1; } } } } printf("%d\n",dist[p]); } int main(){ int t,n; while(scanf("%d%d",&t,&n)!=EOF){ int i,j; memset(head,-1,sizeof(head)); size=0; for(i=1;i<=t;i++){ int a,b,v; scanf("%d%d%d",&a,&b,&v); add(a,b,v); add(b,a,v); } spfa(n,1); } return 0; }
spfa
相关文章推荐
- 字符串A - Palindromes
- hbase的master节点HMaster服务自动停止的解决方法
- bnu 28890 &zoj 3689——Digging——————【要求物品次序的01背包】
- replication复制集
- 生产场景NFS共享存储优化及实战
- 代码吐血?还是我?
- wpf的xml配置文件的读与写(一)
- iOS中隐私数据进行加密的方法
- Maven 安装与使用(一)
- iOS开发——UI进阶篇(二)自定义等高cell,xib自定义等高的cell,Autolayout布局子控件,团购案例
- 浅谈DSL
- 2015年7月20日,工作日结
- 【leetcode】Product of Array Except Self
- 函数的返回类型
- 备赛备忘录
- Eclipse 正则表达式 查找与替换
- NSString 常见数据类型转换:转NSInteger , NSDate(互转)
- javascript中,实现的string的format函数
- 我的项目
- 007.id 类型