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

题目链接: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们正在下注:这个注解很快就会出现在JDK中

Yahor最近提出的Stack Overflow问题引起了我的兴趣&#xff1a; 如何在Java 8编译时确保方法签名“实现”功能接口 。 这是一个很好的问题。 让我们假设以下名义类型&#xff1a; FunctionalInterface interface LongHasher {int hash(long x); }该类型强加了清晰的合同。 实现…

java解码p7b证书文件,通过OpenSSL解码X509证书文件

在Windows平台下&#xff0c;如果要解析一个X509证书文件&#xff0c;最直接的办法是使用微软的CryptoAPI。但是在非Windows平台下&#xff0c;就只能使用强大的开源跨平台库OpenSSL了。一个X509证书通过OpenSSL解码之后&#xff0c;得到一个X509类型的结构体指针。通过该结构体…

php 网页手册模板,网站表单模板

前端界面默认网站表单模板介绍发布&#xff1a;/template/pc/default/home/form_post.html列表&#xff1a;/template/pc/default/home/form_list.html查看&#xff1a;/template/pc/default/home/form_show.html自定义网站表单模板介绍发布&#xff1a;/template/pc/default/h…

iOS安全攻防(三):使用Reveal分析他人app

使用Reveal分析他人app准备工作1&#xff09;已越狱的设备&#xff0c;而且已安装了OpenSSH,MobileSubstrate等有用工具(Cydia源里安装)2&#xff09;本地已安装了Reveal操作步骤1&#xff09;拷贝framework和dylib到越狱机scp -r /Applications/Reveal.app/Contents/SharedSup…

orm框架选型问题_ORM问题

orm框架选型问题在过去的几年中&#xff0c;像Hibernate这样的对象关系映射工具已经帮助开发人员在处理关系数据库方面获得了巨大的生产力增长。 ORM使开发人员可以专注于应用程序逻辑&#xff0c;并避免为诸如插入或查询之类的简单任务编写大量样板SQL。 但是&#xff0c;充分…

iwifi 命令

1&#xff1a; tftp -gr ctwancfg.html 192.168.1.18转载于:https://www.cnblogs.com/gavinwu/p/4221790.html

JBoss BPM Travel Agency演示与现代BPM数据集成

不久前&#xff0c;我们启动了一个规模较大的JBoss Travel Agency演示项目&#xff0c;以展示JBoss BPM Suite的一些更有趣的功能。 我们提供了一系列视频 &#xff0c;不仅向您展示了如何安装它&#xff0c;项目中各种规则和流程工件的含义&#xff0c;还向您介绍了在实际使用…

京东php asp,jd jd demo 关于php的代码里面是 一些京东的接口 包含了 重要 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...

开发工具: PHP文件大小: 183 KB上传时间: 2013-04-15下载次数: 1详细说明&#xff1a;jd demo 关于php的代码里面是关于一些京东的接口里面的代码包含了一些重要-jd demo about php code jingdong interface文件列表(点击判断是否您需要的文件&#xff0c;如果是垃圾请在下面评…

scala入门-10 隐式转换、隐式参数、隐式类

到目前为止&#xff0c;隐式转换是scala的重点和难点了&#xff0c;加油~ 我们先创建一个类名称叫Implicit.scala 再看一个隐式参数的例子&#xff1a; 上面的例子中使用了隐式参数&#xff0c;我们也可以明显的指明参数&#xff1a; 下面看一下隐式类&#xff1a; 相当于&…

抢答网页PHP,[抢答]抢答环节已结束,相关答案已封箱 - 薅羊毛(Coupon)版 - 北大未名BBS...

mojave (你说得都对) 在 ta 的帖子中提到&#xff1a;抢答活动已经全部结束。截止目前&#xff0c;以下题目的正确答案不足5个&#xff1a;第9题、第22题、第23题等。封盘时间为今晚23:00。各位可以在封盘之前继续回答。另外我们提醒大家&#xff0c;如果一题中有多个回答&…

连载《一个程序猿的生命周期》-2.城市校园生活

一个程序猿的生命周期 微信平台 口 号&#xff1a;职业交流&#xff0c;职业规划&#xff1b;面对现实&#xff0c;用心去交流、感悟。 公众号&#xff1a;iterlifetime 百木-ITer职业交流奋斗 群&#xff1a;141588103 微 博&#xff1a;http://www.weibo.com/u/57234…

jvm锁_JVM如何处理锁

jvm锁当我们谈论最新版本的Sun Hotspot Java虚拟机1.6时&#xff0c;当您尝试从java.util.concurrent.locks.Lock实现获取锁或输入同步块时&#xff0c;JVM将执行以下三种锁类型&#xff1a; 有偏见的 &#xff1a;有时&#xff0c;即使在并发系统中也没有争用&#xff0c;并且…

excel使用MySQL数据,如何使用mysql完成excel中的数据生成

Excel是数据分析中最常用的工具&#xff0c;本篇文章通过mysql与excel的功能对比介绍如何使用mysql完成excel中的数据生成&#xff0c;数据清洗&#xff0c;预处理&#xff0c;以及最常见的数据分类&#xff0c;数据筛选&#xff0c;分类汇总&#xff0c;以及数据透视等操作。本…

究竟什么是语法糖呢

其实语法糖只是一个概念&#xff0c;大家可能很早就在接触语法糖了&#xff0c;只是一直不知道这个就是语法糖 百科原话&#xff1a;语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物&#xff0c;是他最先发现了Lambda演算&#xff0c;由此而创立了函数式编程…

Spring Batch –使用JavaConfig替换XML作业配置

我最近协助一个客户启动并运行了Spring Batch实现。 该团队决定继续为批处理作业使用基于JavaConfig的配置&#xff0c;而不是传统的基于XML的配置。 随着这越来越成为配置Java应用程序的一种常用方法&#xff0c;我觉得是时候更新Keyhole的Spring Batch系列了 &#xff0c;向您…

php使用accdb,php如何连接access2007的accdb格式数据库文件?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼header("Content-type: text/html; charsetGBK");/*数据库路径,请自己修改&#xff0c;否则可能运行不正常*/$conn new COM("ADODB.Connection") or die("ADO连接失败!");$connstr "PROVIDER…

Karrigell 入门教程

http://wenku.baidu.com/link?urlPG3sP0mnKt-RPLxEPktTtqTsMlCflOwSTdOEgti21pnFaed1K_MSd4Xx-Z-ZvkgyTvIwWFTB1dEy1eQ9gKyIwIVMeKEiforBbVykW0Y2SM_ 讲karrigell 3.1.1&#xff0c;目录结构和2.x版本不一样了。新版本里面是没有Karrigell.ini 文中提到admin目录下有一个模块…

php autoload用法,php自动加载__autoload()函数用法

autoload在php主版本中是自动加载文件的一个方法了我们可以定义许多的文件在目录然后通过autoload加载了&#xff0c;下面来看看autoload函数用法。在PHP5之后&#xff0c;我们可以通过 __autoload来解决这个问题。 而且在PHP5.1之后&#xff0c;还提供了 spl_autoload_registe…

jaxb xsd生成xml_使用JAXB从XSD生成XML

jaxb xsd生成xml这是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla发表的帖子。 Mohamed解释了如何使用JAXB从给定的XSD生成XML 。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; 我们可以使用JAXB使用给定的Schema将Java对象…

oracle 10g客户端连接11g,生产环境oracle10g升级至11g准备工作

主要有以下的步骤 &#xff1a;1.new ORACLE_HOME(11g), old ORACLE_HOME (10g)--这些需要提前提供给客户&#xff0c;作为基本的约定2.install oracle software 11.2.0.2.0 on production--总共有7个DB,时间很紧&#xff0c;所以准备要充分3.apply DB patch additional if nee…