online_judge_1008
2015-12-02 19:46
267 查看
#include <iostream> #include <vector> using namespace std; struct E { int next; int d,p; }; vector<E> G[1001]; bool mark[1001]; int Dis[1001]; int Cost[1001]; int main() { int n,m; int a,b,d,p; int s,t; int i,j; E tmp; while(cin>>n>>m) { if(n==0 || m==0) break; for(i=1; i<=n; ++i) { G[i].clear(); Dis[i] = -1; Cost[i] = -1; mark[i] = false; } for(i=0; i<m; ++i) { cin>>a>>b>>d>>p; tmp.next = b; tmp.d = d; tmp.p = p; G[a].push_back(tmp); tmp.next = a; G[b].push_back(tmp); } cin>>s>>t; Dis[s] = 0; Cost[s] = 0; mark[s] = true; for(i=0; i<n; ++i) { for(j=0; j<G[s].size(); ++j) { b = G[s][j].next; d = G[s][j].d; p = G[s][j].p; if(mark[b] == true) continue; if(Dis[b]==-1 || Dis[b]>d + Dis[s] || (Dis[b]==d + Dis[s] && Cost[b] > Cost[s] + p)) { Dis[b] = Dis[s] + d; Cost[b] = Cost[s] + p; } } int mini = 200000000; for(j=1; j<=m; ++j) { if(mark[j] == true) continue; if(Dis[j] == -1) continue; if(Dis[j] < mini) { mini = Dis[j]; s = j; } } mark[s] = true; } cout<<Dis[t]<<" "<<Cost[t]<<endl; } return 0; }
像这种经典的Dijkstra算法,写十遍都不为过……
鄙视自己的眼高手低!
相关文章推荐
- iOS UIImageView 网络加载图片自适应大小问题
- linux学习(三)如何在linux系统下利用vi编辑C/C++程序
- VC编辑框(EDIT)实现的自动换行、自动滚屏 、自动清空
- Markdown在线编辑及预览
- 乱码问题总结
- 数字图像处理:第十三章 图象复原
- 做个能够简单堆砌代码的码农,短期可能会得到赏识,但从长远看,处境可能会非常悲惨
- pgm_Bayesian_Network_fundamentals
- bootstrap快速链接
- 数字图像处理:第十二章 小波变换
- DataSource 的理解
- 1045. Favorite Color Stripe (30) 简单动态规划(LCS的变形)
- jQuery中ready与load事件的区别
- Java的注释说明
- 给Java程序猿们推荐一些值得一看的好书
- 轻松学习JavaScript九:JavaScript对象和数组
- 脚本删除指定N天前的文件
- bzoj1185[HNOI2007]最小矩形覆盖
- HDC与HWND的关系
- spatialhadoop2.3源码阅读(四) FileMBR类