题目链接:http://www.patest.cn/contests/mooc-ds/06-2

题目分析:陈姥姥说,这是Dijstra算法的一道题。题目是中文的,这里就不再啰嗦了。有一点提示一下,咱们平时用的Dijistra算法,是用来求最短路径的。这道题不仅要求最短路径,而且要兼顾收费总额,因此除了dist数组还需要一个cost数组。可以在判断if ( dist[V] + data[V][W] < dist[W] )之后,在以同样的方法判断cost。各位同学在做的时候,如果觉得求收费有难度,不妨先自己先把怎么求最短路径的程序写一下,之后再继续看。

特别说明:

  1. 用邻接矩阵表示图比较容易。除了要保存路径长度,还要保存收费金额,因此不妨设置两个邻接矩阵。具体方法见下。

  2. 二维数组的动态申请及初始化,不推荐大家#define一个较大的数,然后直接int a[MAX][MAX],这样做是十分不负责的,十分浪费空间。如果不会的同学,可以参见如下方法:

 1     // 用邻接矩阵存储图
 2     int **data = new int*[n];
 3     int **eCost = new int*[n];
 4     for(int i=0; i<n; i++)
 5     {
 6         data[i] = new int[n];
 7         eCost[i] = new int[n];
 8     }
 9     // 邻接矩阵初始化
10     for(int i=0; i<n; i++)
11     {
12         for(int j=0; j<n; j++)
13         {
14             data[i][j] = MAXNUM;
15             eCost[i][j] = MAXNUM;
16         }
17     }

  3. 无向图 = 双向图,这点说了很多次了,输入的时候要记得双向处理!

 1     // 处理输入数据,并构造邻接矩阵
 2     for(int i=0; i<m; i++)
 3     {
 4         int a1, a2, a3, a4;
 5         cin >> a1 >> a2 >> a3 >> a4;
 6         data[a1][a2] = a3;
 7         data[a2][a1] = a3;
 8         eCost[a1][a2] = a4;
 9         eCost[a2][a1] = a4;
10     }

代码分析:

  额……该说的都在【特别说明】中提到了,这道题的代码量还是比较少的。对于第60行的for循环为什么执行2次呢,其实我也不知道。最开始我用的是while死循环,但是一直没想好怎么跳出循环。干脆一不做二不休,直接执行m次算了,后来发现时间太久了,case2错了,case4超时了。就改成固定的5次,竟然AC了,然后改成3次,最后改成2次。我试过只做1次的话,结果都是错的。我的直觉告诉我,应该是把两端拼接在一起,第一次循环的后半部分和第二次循环的前半部分可以拼凑出一个完整的结果,所以结果就是对的。当然,这个2这个数很值得考究哈,如果你有更好的算法,不妨在留言区内留言,或者向博主解释一下为什么是2。

  Dijistra算法:47~81行

  输出最终结果:82行

 1 #include <iostream>
 2
 3 #define MAXNUM 10000000
 4
 5 using namespace std;
 6
 7 struct node
 8 {
 9     int city1;
10     int city2;
11     int len;
12     int cost;
13     node(int a, int b,int c, int d):city1(a), city2(b), len(c), cost(d) {}
14 };
15
16 int main()
17 {
18     int n, m, s, d;
19     cin >> n >> m >> s >> d;
20     // 用邻接矩阵存储图
21     int **data = new int*[n];
22     int **eCost = new int*[n];
23     for(int i=0; i<n; i++)
24     {
25         data[i] = new int[n];
26         eCost[i] = new int[n];
27     }
28     // 邻接矩阵初始化
29     for(int i=0; i<n; i++)
30     {
31         for(int j=0; j<n; j++)
32         {
33             data[i][j] = MAXNUM;
34             eCost[i][j] = MAXNUM;
35         }
36     }
37     // 处理输入数据,并构造邻接矩阵
38     for(int i=0; i<m; i++)
39     {
40         int a1, a2, a3, a4;
41         cin >> a1 >> a2 >> a3 >> a4;
42         data[a1][a2] = a3;
43         data[a2][a1] = a3;
44         eCost[a1][a2] = a4;
45         eCost[a2][a1] = a4;
46     }
47     // Dijstra算法开始
48     // 记录当前路径长度
49     int *dist = new int[n];
50     // 记录当前花费
51     int *cost = new int[n];
52     // 初始化
53     for(int i=0; i<n; i++)
54     {
55         dist[i] = MAXNUM;
56         cost[i] = MAXNUM;
57     }
58     dist[s] = 0;
59     cost[s] = 0;
60     for(int k=0; k<2; k++)
61     {
62         for(int V=0; V<n; V++)
63         {
64             for(int W=0; W<n; W++)
65             {
66                 if(dist[V] != MAXNUM)
67                 {
68                     if ( dist[V] + data[V][W] < dist[W] )
69                     {
70                         dist[W] = dist[V] + data[V][W];
71                     }
72                     else if ( dist[V] + data[V][W] == dist[W]
73                               && cost[V] != MAXNUM
74                               && cost[V] +  eCost[V][W] < cost[W])
75                     {
76                         cost[W] = cost[V] + eCost[V][W];
77                     }
78                 }
79             }
80         }
81     }
82     cout << dist[d] <<  " " << cost[d] << endl;
83     return 0;
84 }

AC成果:

转载于:https://www.cnblogs.com/clevercong/p/4215792.html

中国大学MOOC-数据结构基础习题集、06-2、旅游规划相关推荐

  1. 中国大学mooc计算机应用基础答案,2020-计算机应用基础(Windows7+Office2016)-中国大学mooc...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.1946年诞生的世界上第一台电子计算机是( ). A.UNIVAC-I B.EDVAC C.ENIAC D.IBM 答案:C 2.第二代计算机的划分年 ...

  2. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(四)(Python语言基础(2))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(四)(Python语言基础(2)) 第4讲 Python语言基础(2) 4.1 内置数据结构 4.1.1 序列数据结构(sequ ...

  3. mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...

    中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...

  4. 慕课乐学python编程题_中国大学MOOC的APP(慕课)2020Python编程基础题目及答案

    中国大学MOOC的APP(慕课)2020Python编程基础题目及答案 更多相关问题 以下哪种细胞类型不是病毒性结膜炎的细胞学特点() 企业在处理非均匀需求过程中,通过那种策略来调整能力满足市场需求的 ...

  5. 学python需要什么文化基础-中国大学MOOC的APP2020Python编程基础答案

    中国大学MOOC的APP2020Python编程基础答案 更多相关问题 :某年级有4个班,不算甲班其余三个班的总人数是131人:不算丁班其余三个班的总人数是134人::24,35,48,63,(). ...

  6. python 慕课网请编写一个fib函数_中国大学MOOC(慕课)Python编程基础章节测试答案...

    中国大学MOOC(慕课)Python编程基础章节测试答案 更多相关问题 放射免疫分析法中,下列有关准确度的描述正确的是A.测得最少量的物质浓度B.重现性C.检测到单一物 社会鼎盛是唐代()的主要原因. ...

  7. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...

  8. 裁纸奔月python_中国大学MOOC的APP2020Python编程基础期末考试搜题公众号答案

    中国大学MOOC的APP2020Python编程基础期末考试搜题公众号答案 更多相关问题 [判断题]高级训练者的大肌肉群练习一般不超过10-12组. A. 对 B. 错 When customers ...

  9. python语言使用不需要付费不存在商业风险_中国大学MOOC慕课_Python语言基础与应用_答案...

    中国大学MOOC慕课_Python语言基础与应用_答案 答案: 更多相关问题 下列不属于不得再次公开发行公司债券的情形是(). A.对于公司前一次公开发行的公司债券尚未募足B 从生物电的角度而言,细胞 ...

  10. 慕课乐学python编程题_中国大学mooc慕课_Python编程基础_2020章节测试答案

    中国大学mooc慕课_Python编程基础_2020章节测试答案 更多相关问题 [单选] 双绕组变压器降压可获得(). [单选] 电炉和电烙铁是根据()制造而成的 [单选] 各种电流互感器产品技术数据 ...

最新文章

  1. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节
  2. vue 关闭log_vue或react项目生产环境去掉console.log的操作
  3. 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
  4. Java Inner Class 内部类
  5. sublime 安装 插件
  6. 淘汰Hyper-V replication 拥抱Storage Replica
  7. 手机端滚动屏幕加载更多
  8. c# combobox集合数据不显示_VBA与数据库解决方案第9讲:如何打开数据库记录集合,并把所得的数据显示到工作表文件中...
  9. Codeforces 384E-线段树+dfs序
  10. 比大小 log_2^3 与 log_3^5
  11. 数据库常见导入文件方法
  12. 项目沟通管理 试题分析
  13. CORTEX-M4F基本知识
  14. shell脚本从基础到实战(全网最详细)监控、加减乘除、购票、批量创建与删除用户等脚本
  15. shell 多个引号冲突_Shell 引号嵌套
  16. 敏捷下的scrim、xp、3355、TDD、BDD、CI、DI及四个仪式、十二原则汇总
  17. 安卓APP注册登录+Tomcat服务器搭建+MySQL数据库建立+加密传输+servlet后端内容编写及部署到Tomcat服务器
  18. dw cs6设置字体样式
  19. PAT/C++甲级题解——图
  20. stm32h7b0替代h750程序导致单片机挂掉无法烧录程序问题

热门文章

  1. 睡眠 应该用 a加权 c加权_在神经网络中提取知识:学习用较小的模型学得更好...
  2. 【技术解决方案】优化FFmpeg编码器参数设置
  3. php 对象 final,PHP7_OOP_对象重载以及魔术方法_对象遍历_final关键字
  4. php中的fpm_PHP中的FPM是做什么的
  5. php模块安装 pdo_mysql_关于php插件pdo_mysql的安装
  6. 华硕z9pa u8 bios下载_教程:图文教学,华硕M8H M8R硬破解支持intel 9代处理器
  7. 计算机应用基础人才培养方案,1. 培养方案(计算机应用基础课程).doc
  8. java换成中文_如果我们的编程替换成中文会变成怎样?
  9. c语言程序求一一组数平均值,编写求一组整数的和与平均值的程序
  10. 笔记本启动与关闭自带键盘