A. 最短路

Time Limit: 1000ms
Memory Limit: 32768KB

64-bit integer IO format: %I64d      Java class name: Main

 
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

 

Input

输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。

 

Output

对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间

 

Sample Input

  1. 2 1
  2. 1 2 3
  3. 3 3
  4. 1 2 5
  5. 2 3 5
  6. 3 1 2
  7. 0 0

Sample Output

  1. 3
  2. 2
  3.  
  4. 解题:最短路。。。
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <climits>
  7. #include <vector>
  8. #include <queue>
  9. #include <cstdlib>
  10. #include <string>
  11. #include <set>
  12. #define LL long long
  13. #define INF 0x3f3f3f
  14. using namespace std;
  15. int mp[][],d[],n,m;
  16. bool vis[];
  17. void dij(){
  18. int i,j,theMin,index;
  19. for(i = ; i <= n; i++)
  20. d[i] = INF>>;
  21. d[] = ;
  22. memset(vis,false,sizeof(vis));
  23. for(i = ; i < n; i++){
  24. theMin = INF;
  25. for(j = ; j <= n; j++){
  26. if(!vis[j] && theMin > d[j]) theMin = d[index = j];
  27. }
  28. vis[index] = true;
  29. if(index == n) break;
  30. for(j = ; j <= n; j++){
  31. if(!vis[j] && d[j] > d[index]+mp[index][j])
  32. d[j] = d[index] + mp[index][j];
  33. }
  34. }
  35. }
  36. int main(){
  37. int i,j,u,v,w;
  38. while(scanf("%d%d",&n,&m),n||m){
  39. for(i = ; i <= n; i++)
  40. for(j = ; j <= n; j++)
  41. mp[i][j] = INF;
  42. for(i = ; i < m; i++){
  43. scanf("%d%d%d",&u,&v,&w);
  44. mp[u][v] = mp[v][u] = w;
  45. }
  46. dij();
  47. printf("%d\n",d[n]);
  48. }
  49. return ;
  50. }

优先队列版Dijkstra

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <vector>
  6. #include <queue>
  7. #include <climits>
  8. #include <algorithm>
  9. #include <cmath>
  10. #define LL long long
  11. #define INF 0x3f3f3f
  12. using namespace std;
  13. #define pii pair<int,int>
  14. const int maxn = ;
  15. struct arc {
  16. int to,w;
  17. };
  18. int n,m;
  19. vector<arc>g[maxn];
  20. bool done[maxn];
  21. int d[maxn];
  22. priority_queue<pii,vector< pii >,greater< pii > >q;
  23. void dj() {
  24. int i,j;
  25. for(i = ; i <= n; i++) {
  26. done[i] = false;
  27. d[i] = INF;
  28. }
  29. d[] = ;
  30. while(!q.empty()) q.pop();
  31. q.push(make_pair(d[],));
  32. while(!q.empty()) {
  33. pii u =q.top();
  34. q.pop();
  35. int x = u.second;
  36. if(done[x]) continue;
  37. done[x] = true;
  38. for(i = ; i < g[x].size(); i++) {
  39. j = g[x][i].to;
  40. if(d[j] > d[x] + g[x][i].w) {
  41. d[j] = d[x]+g[x][i].w;
  42. q.push(make_pair(d[j],j));
  43. }
  44. }
  45. }
  46.  
  47. }
  48. int main() {
  49. int i,j,u,v,w;
  50. while(scanf("%d%d",&n,&m),n||m) {
  51. for(i = ; i <= n; i++)
  52. g[i].clear();
  53. for(i = ; i < m; i++) {
  54. scanf("%d%d%d",&u,&v,&w);
  55. g[u].push_back((arc) {v,w});
  56. g[v].push_back((arc) {u,w});
  57. }
  58. dj();
  59. printf("%d\n",d[n]);
  60. }
  61. return ;
  62. }

Bellman—Ford算法:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <vector>
  6. #include <queue>
  7. #include <climits>
  8. #include <algorithm>
  9. #include <cmath>
  10. #define LL long long
  11. #define INF 0x3f3f3f
  12. using namespace std;
  13. #define pii pair<int,int>
  14. const int maxn = ;
  15. struct arc {
  16. int u,v,w;
  17. } g[maxn];
  18. int n,m,cnt;
  19. int d[maxn];
  20. void bf() {
  21. int i,j;
  22. for(i = ; i <= n; i++)
  23. d[i] = INF;
  24. d[] = ;
  25. bool flag;
  26. for(i = ; i < n; i++) {
  27. flag = true;
  28. for(j = ; j < cnt; j++)
  29. if(d[g[j].v] > d[g[j].u]+g[j].w){
  30. d[g[j].v] = d[g[j].u]+g[j].w;
  31. flag = false;
  32. }
  33. if(flag) break;
  34. }
  35. }
  36. int main() {
  37. int i,u,v,w;
  38. while(scanf("%d%d",&n,&m),n||m) {
  39. for(cnt = i = ; i < m; i++) {
  40. scanf("%d%d%d",&u,&v,&w);
  41. g[cnt++] = (arc) {u,v,w};
  42. g[cnt++] = (arc) {v,u,w};
  43. }
  44. bf();
  45. printf("%d\n",d[n]);
  46. }
  47. return ;
  48. }

spfa算法版:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <vector>
  6. #include <queue>
  7. #include <climits>
  8. #include <algorithm>
  9. #include <cmath>
  10. #define LL long long
  11. #define INF 0x3f3f3f
  12. using namespace std;
  13. #define pii pair<int,int>
  14. const int maxn = ;
  15. struct arc {
  16. int to,w;
  17. };
  18. vector<arc>g[maxn];
  19. queue<int>q;
  20. int n,m,d[maxn];
  21. bool done[maxn];
  22. void spfa() {
  23. int i,j;
  24. for(i = ; i <= n; i++){
  25. d[i] = INF;
  26. done[i] = false;
  27. }
  28. d[] = ;
  29. while(!q.empty()) q.pop();
  30. done[] = true;
  31. q.push();
  32. while(!q.empty()){
  33. int temp = q.front();
  34. q.pop();
  35. done[temp] = false;
  36. for(i = ; i < g[temp].size(); i++){
  37. j = g[temp][i].to;
  38. if(d[j] > d[temp]+g[temp][i].w){
  39. d[j] = d[temp]+g[temp][i].w;
  40. if(!done[j]){
  41. q.push(j);
  42. done[j] = true;
  43. }
  44. }
  45. }
  46. }
  47.  
  48. }
  49. int main() {
  50. int i,u,v,w;
  51. while(scanf("%d%d",&n,&m),n||m) {
  52. for(i = ; i <= n; i++)
  53. g[i].clear();
  54. for(i = ; i < m; i++) {
  55. scanf("%d%d%d",&u,&v,&w);
  56. g[u].push_back((arc){v,w});
  57. g[v].push_back((arc){u,w});
  58. }
  59. spfa();
  60. printf("%d\n",d[n]);
  61. }
  62. return ;
  63. }

图论trainning-part-1 A. 最短路的更多相关文章

  1. POJ 3159 Candies (图论,差分约束系统,最短路)

    POJ 3159 Candies (图论,差分约束系统,最短路) Description During the kindergarten days, flymouse was the monitor ...

  2. 图论算法(三) 最短路SPFA算法

    我可能要退役了…… 退役之前,写一篇和我一样悲惨的算法:SPFA 最短路算法(二)SPFA算法 Part 1:SPFA算法是什么 其实呢,SPFA算法只是在天朝大陆OIers的称呼,它的正统名字叫做: ...

  3. 图论算法(二)最短路算法:Floyd算法!

    最短路算法(一) 最短路算法有三种形态:Floyd算法,Shortset Path Fast Algorithm(SPFA)算法,Dijkstra算法. 我个人打算分三次把这三个算法介绍完. (毕竟写 ...

  4. NOIp 图论算法专题总结 (1):最短路、最小生成树、最近公共祖先

    系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 最短路 Floyd 基本思路:枚举所有点与点的中点,如果从中点走最短,更新两点间 ...

  5. 对于dijkstra最短路算法的复习

    好久没有看图论了,就从最短路算法开始了. dijkstra算法的本质是贪心.只适用于不含负权的图中.因为出现负权的话,贪心会出错. 一般来说,我们用堆(优先队列)来优化,将它O(n2)的复杂度优化为O ...

  6. NOIP主要考查范围

    基本数据结构 栈 队列 数组 优先队列 中级数据结构 堆(大根堆,小根堆) 并查集和带权并查集 哈希表 高级数据结构 (可选学) 树状数组 线段树 各种其他树 字符串和相关内容 1.KMP 2.各种操 ...

  7. Codevs 2370 小机房的树

    2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为 ...

  8. 2014年CCNU-ACM暑期集训总结

    2014年CCNU-ACM暑期集训总结 那个本期待已久的暑期集训居然就这种.溜走了.让自己有点措手不及.很多其它的是对自己的疑问.自己是否能在ACM这个领域有所成就.带着这个疑问,先对这个暑假做个总结 ...

  9. NOIP经典基础模板总结

    date: 20180820 spj: 距离NOIP还有81天 目录 STL模板: priority_queue 的用法:重载<,struct cmpqueue 的用法 stack 的用法vec ...

  10. 【SPOJ116】Intervals

    题目大意:有 N 个区间,在区间 [a, b] 中至少取任意互不相同的 c 个整数.求在满足 N 个区间约束的情况下,至少要取多少个正整数. 题解:差分约束系统模板题. 差分约束系统是对于 N 个变量 ...

随机推荐

  1. 难道这就是gin中间件的原理,一个装饰者模式而已?

    func wrapCtx(handler func(ctx *gin.Context)) gin.HandlerFunc { return func(c *gin.Context) { //获取请求的 ...

  2. Spring AOP初步总结(二)

    该篇为Spring AOP的一个应用案例:系统日志 需求:将任何删除,更改或新增数据库的操作汇总到数据库中 步骤1:编写切面 @Aspect @Component public class SysLo ...

  3. spring mvc添加静态资源访问时@Controller无效的解决

    web.xml中的url-pattern设置为/,添加mvc:resources访问静态资源时,@Controller无效的问题 web.xml: <servlet> <servle ...

  4. 常用验证函数isset()/empty()/is_numeric()函数

    1) isset()用来检查变量是否设置,若变量存在且值不为NULL时为TRUE: 检查多个变量时变量要全部存在且值不为NULL时为TRUE: 若用函数unset()释放后再用isset()检测时为F ...

  5. FusionCharts 3.2.1 常用用法

    一.XML格式 1.实例化一个FusionCharts 对象 var member_fund_count_pie = new FusionCharts("FusionCharts3.2.1/ ...

  6. 洛谷 P1732 活蹦乱跳的香穗子

    题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...

  7. asp.net mvc集成log4net

    第一步:在web项目的引用中添加log4net.dll,可以通过Nuget直接下载并安装: 第二步:在web项目的web.config配置文件的configuration节点内添加log4net节点, ...

  8. 数组、Math、JOSN总结

    json对象: 1.数组有length属性[尽量使用for循环] 2.而json没有length属性[可以使用for...in...循环] 3.for in 不能遍历页面中的节点对象. for ( v ...

  9. DatePicker 注意点 1.不用v-model 用:value 2.配合on-change进行回调 3.初始值 当天的用 (new Date()).toLocaleDateString().replace(/\//g, '-')

    <DatePicker :value="formData.date" type="date" format="yyyy-MM-dd" ...

  10. 三、绘图和可视化之matplotlib

    #matplotlib简单绘图之plot import matplotlib.pyplot as plt a=[1,2,3] b=[10,2,30] plt.plot(a)#纵坐标为a的值,横坐标为a ...