07年全国数学建模竞赛试题解答(由于懒得将图片依次贴出,需要者可以下载相关附件)
乘公交 看奥运
相关文件下载点击此处
摘 要
本设计要解决的是合理给出两站点间的最佳路线选择问题,即给出一条经济且省时的路线。在处理此问题之前,我们根据调查和分析,对影响线路选择的因素进行筛选,最终确定了以下三个影响较大的因素:第一是换乘次数;第二是乘车时间;第三是乘车费用。依据各因素对路线选择的影响程度,我们按不同的权重对它们进行考虑。从实际情况分析,人们通常宁愿多乘坐几站地也不愿换车,所以我们赋予换乘次数较大的权重。为了解决换乘次数最少,乘车时间相对较短、乘车费用相对较少的问题,经过尝试与探索,我们采用了现代分析的方法,对起始站和终点站有无相交站点进行分类讨论,归纳出直达,换乘一次,换乘两次的情况(三次以上的情形可以类推),并通过Matlab编制程序,给出了任意两站点间的最佳乘车路线以及换车的地点,最后还提出了进一步的意见和建议。
关键词: 最佳路线 换乘次数 乘车时间 乘车费用
一、问题的重述
第29届奥运会明年8月将在北京举行,作为城市枢纽的公共交通承担着非常重的运输任务。近年来,北京市的公交系统有很大的发展,公交线路的条数和公交车数量在迅速增多,给人民生活带来便利的同时,也面临多条线路得选择问题,有时出行往往还需要转乘多辆公交车才能到达目的地。如何在短时间、换乘次数最少、成本最低的情况到达目的地,是人们所关注的问题。
因此,我们通过建立线路选择的模型与算法,设计一套自主查询计算机系统,查询到出行时所需的最佳公交路线及换乘方法,给人们出行节约更多的时间和金钱。
要求:
1、仅考虑公汽线路,建立任意两公汽站点之间线路选择问题的数学模型与算法。并求出以下6对起始站→终到站之间的最佳路线。
(1)S3359→S1828 (2)S1557→S0481 (3)S0971→S0485
(4)S0008→S0073 (5)S0148→S0485 (6)S0087→S3676
2、同时考虑公汽与地铁线路,解决1中问题。
3、如果所有站点间的步行时间已知,建立任意两站点间路线选择问题的数学模型。
二、模型的假设
1、所有公交线路的开班、收班时间相同。
2、公车不会因为堵车等因素延长行驶时间。
3、各条线路不会有新的调整与变化。
4、环线可以以任意站作为起点站和终点站,并且是双向的。
5、除环线以外的线路,到达终点站后,所有的人都必须下车。
6、人们对换乘车次数尽量少的偏好程度总是大于对花费时间相对短和花费金钱相对少的偏好程度。
7、同一地铁站对应的任意两个公汽站之间可以通过地铁站换乘,且无需支付地铁费。
三、符号的说明
符号 |
表示意义 |
第条包含初始站点的线路, |
|
第条包含目标站点的线路, |
|
第条中间线路, |
|
上的第个站点, |
|
上的第个站点, |
|
上的第个站点, |
|
乘客在第段线路上乘坐的站数 |
|
乘客在一次地铁线路上乘坐的总站数 |
|
公汽换乘公汽的次数 |
|
地铁换乘地铁的次数 |
|
地铁换乘公汽的次数 |
|
公汽换乘地铁的次数 |
四、问题的分析、模型的建立及求解
4.1 问题一
4.1.1 问题一的分析
已知相邻公汽站平均行驶时间(包括停站时间):3分钟;公汽换乘公汽平均
耗时:5分钟(其中步行时间2分钟)。
公汽票价:分为单一票价与分段计价两种,标记于线路后;其中分段估计票
价为:0~20站:1元;21~40站:2元;40站以上:3元。
题目要求设计任意两公汽站点之间线路选择问题的数学模型与算法。
对于附录中的1.1 公汽线路信息.txt中的数据进行处理后,以文本文件形式导入Matlab中,找到了站点与站点之间的关系。进一步发现表明无论试图产生邻接矩阵或边权矩阵因数据太庞大而可行性极低,其运行时间长达50分钟,故考虑按题目给的路线来建立站点矩阵并对此矩阵进行处理后能够清晰有效地应用此矩阵。
4.1.2 模型的建立及求解
模型一
设为乘坐公交线路的费用函数:
,
总时间函数:
(1)
总费用函数:
(2)
其中表示乘客在公交线路上乘坐的站数;表示公汽换乘公汽的次数。
目标:找出任意给定的两站点的乘车线路,使和相对最小。
算法思路:由于人们的对换乘车次数尽量少的偏好程度总是大于对花费时间和金钱相对少的偏好程度,我们将优先考虑换乘车次数尽量少,然后再考虑花费时间相对短、花费金钱相对少,对得出的所有结果中进行筛选。换乘次数的大概思路及步骤如下:
将所有包含初始站点的线路建成一个集合S,,,所有包含目标站点的线路建成一个集合G,,。
, ,
,,
,。
1、直达的线路。
当时,存在、,,,使得,即、为同一线路。此线路既包含初始站点又包含目标站点。
若,那么,此线路为所求直达线路。
若,或者当时,考虑换乘一次的线路。
2、换乘一次的线路。
当有和相交时,存在、,,,有及,,。使得,即、为同一站点。
若,,那么,从初始站点乘坐线路,行驶至站点,即在站点,换乘线路至目标站点。即
若不满足,,或者,当无任何和相交时,考虑换乘两次的线路。
3、换乘两次的线路。
记,,,有,,,且满足与、都相交时,即
线路既不包含初始站点又不包含目标站点,,。但是
存在及,使得,
存在及,使得,
即、为同一站点,且、为同一站点。,,,,,,。
若,,,那么,从初始站点乘坐线路,行驶至站点,即在站点,换乘线路至站点,即在站点,换乘线路至目标站点。即
若不满足,,,或者,当不存在满足条件的时,说明需要换乘三次才能够到达目标站点。换乘三次的线路的模型建立原理是相同的。由于几乎没有这样的情况,故我们不作考虑。
通过考虑花费的时间或金钱,在得出的多条结果中进行筛选。
4.1.3 问题一的结果
由于公交线路的固定性、重叠性和可选择性,使得公交乘客出行线路选择行为具有相当的复杂性。由公交乘客的路径选择特性可知,乘客总是根据个人偏好选择出行路线(或希望出行时间最少,或希望换乘次数最少,或希望出行费用最低),可称之为最短路因素。同时,由于公交网络的复杂性,使得最短路判断出现差异,而个人选择行为带有一定的随机性,所以多路径选择较为符合乘客的行为特点。另外一个方面,当乘客要进行一次换乘时,他会考虑到时间或者费用等问题,但当乘客必须二次换乘时,时间是决定乘客选择路线的唯一因素,所以在这种情况下我们只考虑途经站点最少的二次转乘路线。基于以上考虑,我们对每道小题都给出了多种乘车路线,以供乘客根据自己的需要选择。
(程序见附录8.1、附录8.2、附录8.3)
(1)S3359→S1828
线路(条) |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S3359S1784 S1828 |
101 |
3 |
2 |
S3359S1784 S1828 |
101 |
3 |
3 |
S3359S3515S1784S1828 |
94 |
3 |
4 |
S3359S0359S1784S1828 |
94 |
3 |
5 |
3359S3515S1784S1828 |
94 |
3 |
评价说明:经Matlab运行程序,得出了5条优化线路。其中,1、2条换乘一次,3、4、5条换乘两次, 3、4、5条线路比1、2条线路多换乘一次,所花的金钱相同,但是节省了7分钟时间。
乘客根据自己的需要进行选择。
(2)S1557→S0481
线路(条) |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S1557S1919S2424S0481 |
112 |
3 |
2 |
S1557S1919S2424S0481 |
112 |
3 |
3 |
S1557S1919S2424S0481 |
112 |
3 |
4 |
S1557S1919S2424S0481 |
112 |
3 |
5 |
S1557S1919S2424S0481 |
112 |
3 |
6 |
S1557S1919S2424S0481 |
112 |
3 |
7 |
S1557S1919S2424S0481 |
112 |
3 |
8 |
S1557S1919S2424S0481 |
112 |
3 |
9 |
S1557S1919S2424S0481 |
112 |
3 |
评价说明:经Matlab运行程序,得出了9条优化线路。乘坐这9条线路所花费的时间和金钱都相同,且均需要换乘两次。不存在换乘一次的线路。
乘客可以选择任意一条线路。
(3)S0971→S0485
线路 |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0971S2184 S0485 |
128 |
3 |
2 |
S0971S0992 S0485 |
131 |
3 |
3 |
S0971S3405S2515S0485 |
94 |
3 |
4 |
S0971S1520S2265S0485 |
94 |
3 |
5 |
S0971S1520S2654S0485 |
94 |
3 |
6 |
S0971S1520S1729S0485 |
94 |
3 |
7 |
S0971S1520S3766S0485 |
94 |
3 |
8 |
S0971S1520S2265S0485 |
94 |
3 |
9 |
S0971S1520S2265S0485 |
94 |
3 |
评价说明:经Matlab运行程序,得出了9条优化线路。其中,1条换乘一次,3~9条换乘两次, 3~9条线路比1条线路多换乘一次,所花的金钱相同,但是节省了37分钟时间。
乘客根据自己的需要进行选择。
(4)S0008→S0073
线路 |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0008S2083 S0073 |
83 |
2 |
2 |
S0008S2263 S0073 |
83 |
2 |
3 |
S0008S2683 S0073 |
83 |
2 |
4 |
S0008S0400 S0073 |
83 |
2 |
5 |
S0008S2559 S0073 |
83 |
3 |
6 |
S0008S1383S2833S0073 |
82 |
3 |
7 |
S0008S1691S2833S0073 |
82 |
3 |
8 |
S0008S3766S2833S0073 |
82 |
3 |
9 |
S0008S1383S2833S0073 |
82 |
3 |
10 |
S0008S1383S2833S0073 |
82 |
3 |
评价说明:经Matlab运行程序,得出了10条优化线路。其中,1~5条换乘一次,所花费的时间相同,但是1~4条比5条节省了1元钱。6~10条换乘两次,所花的金钱比1~4条多1元,只节省了1分钟时间。
所以建议乘客选择1~4条。
(5)S0148→S0485
线路 |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0148S0036S2210S0485 |
106 |
3 |
2 |
S0148S0036S3332S0485 |
106 |
3 |
3 |
S0148S0036S3351S0485 |
106 |
3 |
评价说明:经Matlab运行程序,得出了3条优化线路。乘坐这3条线路所花费的时间和金钱都相同,且均需要换乘两次。不存在换乘一次的线路。
乘客可以选择任意一条线路。
(6)S0087→S3676
线路(条) |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0087S3496 S3676 |
65 |
2 |
2 |
S0087S1893 S3676 |
71 |
2 |
3 |
S0087S0541S0236S3676 |
52 |
3 |
4 |
S0087S0541S2336S3676 |
52 |
3 |
评价说明:经Matlab运行程序,得出了4条优化线路。其中,1、2条换乘一次,所花费的金钱相同,但是1条比2条节省了6分钟。3、4条换乘两次,所花的金钱相同,且比1、2条多1元,但节省了时间。
所以建议乘客选择1、3、4条。
4.2 问题二
4.2.1 问题二的分析
已知相邻地铁站平均行驶时间(包括停站时间): 2.5分钟;
地铁换乘地铁平均耗时:4分钟(其中步行时间2分钟);
地铁换乘公汽平均耗时:7分钟(其中步行时间4分钟);
公汽换乘地铁平均耗时:6分钟(其中步行时间4分钟);
地铁票价:3元(无论地铁线路间是否换乘);其它的公汽时间信息与问题一相同。
题目要求同时考虑公汽与地铁线路,设计任意两公汽站点之间线路选择问题的数学模型与算法。在此,我们考虑了总时间和总费用两个函数,讨论方法与一题类似,只是加入了地铁,分为乘坐地铁和完全不坐地铁两种。
4.2.2 模型的建立及求解
模型二
设,分别为乘坐公交和地铁线路的费用函数:
总时间函数:
(,) (3)
总费用函数:
(4)
其中表示乘客在公交线路上乘坐的站数;表示乘客在一次地铁线路上乘坐的总站数;分别表示公汽换乘公汽,地铁换乘地铁,地铁换乘公汽,公汽换乘地铁的次数。
目标:找出任意给定的两站点的乘车线路,使和相对最小。
算法思路:由于假设同一地铁站对应的任意两个公汽站之间可以通过地铁站换乘且无需支付地铁费,那么不妨把同一地铁站所对应的几个公汽站合并成一个站。
地铁线路
,
。
1、可以乘坐地铁的线路。
(1)若初始站点和目标站点都在地铁线路或者上,那么,只乘坐地铁或者便可以直达。其中,若都在线路上,就选择经过站数最少的方向。
若初始站点和目标站点分别在地铁线路和上,那么,需要进行一次地铁换乘地铁才能到达。
(2)若只有初始站点或只有目标站点在地铁线路上,则需要换乘公汽才能到达目标站点。
①初始站点,,目标站点且,。
当有和地铁相交时,即存在,有,使得,。,。
若,那么,从初始站点(记为)乘坐地铁线路,行驶至站点(记为),换乘公汽线路至目标站点。,。即
()
()
其中,时需要地铁换乘地铁。
若不满足,或者当没有这样的时,说明在地铁换乘公汽后,还需要进行公汽换乘公汽。由于这样的情况几乎不存在,故不作考虑。
②目标站点,初始站点且,
同理可得结论。
(3)若初始站点和目标站点都不在地铁线路上,则先乘坐公汽,换乘地铁,再由地铁换乘公汽。
地铁线路既和相交又和相交时,即
地铁线路既不包含初始站点又不包含目标站点。但是存在、,,,有
,使得,记为,
,使得,记为,
,,,。
若,,那么,从初始站点乘坐线路,行驶至站点(记为),换乘地铁线路至站点(记为),换乘线路至目标站点。即
()
()
其中,时需要地铁换乘地铁。
若不满足,,或者不存在、都与地铁线路相交,说明需要在地铁线路前或后进行公汽与公汽的换乘。由于这样的情况几乎不存在,故不作考虑。
2、只乘坐公汽的线路。
完全排除地铁线路,与解决问题一的方法相同。
4.1.3 问题二的结果
(程序见附录8.4)
(1)S3359→S1828
应用Matlab编出的程序显示出没有在地铁站附近车站转站的的转站台,所以此时不坐地铁的结果完全和“问题一”中的第一小题的结果相同。
因此在这种情况下,建议在这些站点乘客应当首先考虑坐公汽。具体情况请参照“问题一”的的结果。
(2)S1557→S0481
同(1)的结论。
图1 北京地铁图
(3)S0971→S0485
通过S0971的路线同时又能够到达地铁站的线路分别为:L160上行,L263下行,L119上行,L024下行,L119下行,L013上行,分别到达地铁的D01,D02,D26;另外一方面,与终点站S0485相连并能够到达地铁站的公交线路分别是L375上,L469下行,L051上行,L417下行,L395下行,分别到达地铁站的D21,D22和D20。
可以乘坐地铁:
线路(条) |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0971(D26)(D21)S0485 |
138.5 |
6 |
2 |
S0971(D26)(D21)S0485 |
138.5 |
6 |
3 |
S0971(D26)(D21)S0485 |
138.5 |
6 |
只乘坐公汽:
线路 |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0971S2184 S0485 |
128 |
3 |
2 |
S0971S0992 S0485 |
131 |
3 |
3 |
S0971S3405S2515S0485 |
94 |
3 |
4 |
S0971S1520S2265S0485 |
94 |
3 |
5 |
S0971S1520S2654S0485 |
94 |
3 |
6 |
S0971S1520S1729S0485 |
94 |
3 |
7 |
S0971S1520S3766S0485 |
94 |
3 |
8 |
S0971S1520S2265S0485 |
94 |
3 |
9 |
S0971S1520S2265S0485 |
94 |
3 |
评价说明:经Matlab运行程序,得出了3 条乘坐地铁的优化线路。但与乘坐公汽对比,如果要坐地铁,不仅需要换乘多次,还会花费大量时间。
建议乘客乘坐公汽。
(4)S0008→S0073
同(1)的结论。
(5)S0148→S0485
可以乘坐地铁:
线路(条) |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0148S3045(D02)(D21)S0485 |
87.5 |
5 |
2 |
S0148S3045(D02)(D21)S0485 |
87.5 |
5 |
3 |
S0148S3045(D02)(D21)S0485 |
87.5 |
5 |
4 |
S0148S3045(D02)(D21)S0485 |
87.5 |
5 |
只乘坐公汽:
线路 |
初始站换乘站 (换乘站)目标站 |
时间(分) |
金钱(元) |
1 |
S0148S0036S2210S0485 |
106 |
3 |
2 |
S0148S0036S3332S0485 |
106 |
3 |
3 |
S0148S0036S3351S0485 |
106 |
3 |
评价说明:经Matlab运行程序,得出了4条乘坐地铁的优化线路。与乘坐公汽对比,节省的时间较多。
乘客根据自己的需要进行选择。
(6)S0087→S3676
抽象出T1和T2的模型,如图1所示。由于S0087和S3676这两个站点都对应地铁站,又由2.2 地铁T2线换乘公汽信息.txt,故把S0087合并到地铁站点D27,把S3676合并到地铁站点D36。又由图1所知,当乘客在S0087时,他有两种很快捷,方便的乘车路线到达S3676,即
,
。
两条路线都只花3元钱,而第一条线路耗时25分钟,第二条只耗时20分钟。相比于“问题一”中的第六个小题,在花费均相等的前提下,建议乘客选乘地铁,因为这在很大程度上节约了时间,同时也免去了转车带来的麻烦。
4.3 问题三
4.3.1 问题三的分析
已知所有站点间的步行时间,其余信息与问题二相同,题目要求建立任意两站点间路线选择问题的数学模型。
问题三在问题二的基础上又增加了步行这种情况,在适当站点步行,可以节省交通费用而且不会消耗过多时间,比如某些乘客在一段分段计价线路上欲乘坐21或41个站点,则可以选择在第20站或第40站下车,步行一站即到达目的地,这样做可以节省1元。
4.3.2 模型的建立
模型三
设分别为乘坐公交和地铁线路的费用函数:
根据实际情况,在地铁线路上不考虑步行。我们可以在初始站点、目标站点或换乘站点的附近考虑步行,即在任意公交线路,上最多下车一次。否则,若在某个,上下车步行两次,则在上需要多购买车票一次,同时消耗的时间更多,此做法既违反常理,又不经济实惠。
设在线路,上步行的站数为,,相邻公汽站步行时间为,那么
总时间函数:
, (5)
总费用函数:
, (6)
目标:找出任意给定的两站点的乘车线路,使和相对最小。
五、模型的评价
5.1 模型的优点:
1、型简单易懂,操作简单,涵盖了所有路线的选择情况。
2、此模型的设计完全符合“乘公交,看奥运”的主题,解决了公交线路的选择问题,使公众的出行更加通畅便利。
5.2 模型的缺点:
忽略了人流、车流拥挤的状况。
六、模型的改进和推广
6.1 对于若干条从某一初始站点到目标站点的线路,我们可以设计一种带记忆功能的系统,即乘客选择某路径的次数越多,说明此路径是比较优的路径,为以后选择路径提供必要的信息。系统使用的时间越长,为乘客提供的信息越全面,越准确,系统也越智能化。这样就可以为乘客需求量最大的一条增加班次,以满足更多人的需要。
6.2在假设中提到,所有线路的开班、收班时间相同,但事实并非如此。那么可以在模型的设计中加入线路运行的时间元素,使乘客查询时只显示正在运行的线路。
七、参考文献
[1] 姜启源,邢文训,谢金星,杨顶辉,大学数学实验,北京:清华大学出版社,2000
[2] 傅鹂,龚劬,刘琼荪,何中市编著,数学实验,北京:科学出版社,2000
[3] 王树禾,图论,北京:科学出版社,2004
[4] 苏金明等编,MATLAB工具箱应用
八、 附录
8. 1 问题一的程序代码(直达的线路)
x1=input('please input starting station:');
y1=input('please input the terminal :');
[i1,j1]=find(a==x1);
[i2,j2]=find(a==y1);
[m,n]=size(i1);
[p,q]=size(i2);
r=0;
for i=1:m
for j=1:p
if i1(i,n)==i2(j,q)
nv=find(x1==a(i1(i,n),:));
nu=find(y1==a(i2(j,q),:));
if nv<nu
r=r+1;
t(r)=i1(i,n);
end
end
end
end
if r~=0
disp(t)
else
t=0
end
j1
j2
%直达的输出说明 t是线路 j1是起点站在该线路的第几个站 j2是终点站在该线路的第几个站
8. 2 问题一的程序代码(换乘一次的线路)
x1=input('请输入起点站:');
y1=input('请输入终点站:');
W=input('输入最多经过站点的个数:');
[i1,j1]=find(a==x1);
[i2,j2]=find(a==y1);
[m,n]=size(i1);
[p,q]=size(i2);
for i=1:m
for j=1:p
ro=0;
if i1(i,n)~=i2(j,q)
mv=a(i1(i,n),:);
mu=a(i2(j,q),:);
[mo,no]=size(mv);
[po,qo]=size(mu);
for io=1:no
for jo=1:qo
if mv(mo,io)==mu(po,jo)
ad=find(a(i1(i,n),:)==x1); %x1所在的位置
bd=find(a(i2(j,q),:)==y1); %y1所在的位置
ao=find(mv(mo,io)==a(i1(i,n),:)); %转站点在x1所在列的位置
bo=find(mv(mo,io)==a(i2(j,q),:)); %转站点在y1所在列的位置
if ad<ao&bo<bd&(ao-ad+bd-bo)<W
ro=ro+1;
to(ro)=mv(mo,io);
tka(ro)=ao-1;
tji(ro)=bo-1;
end
end
end
end
if ro~=0
disp('中转站点')
disp(to)
disp('中转站点在始发线上的位置')
disp(tka)
disp('中转站点在抵达线上的位置')
disp(tji)
vo(1)=i1(i,n);vo(2)=i2(j,q);
disp('始发线和抵达线')
a(vo,1)
disp('起点站位置')
ad-1
disp('终点站位置')
bd-1
end
end
end
end
8. 3 问题一的程序代码(换乘两次的线路)
x1=input('请输入起点站:');
y1=input('请输入终点站:');
W=input('输入最多经过站点的个数:');
[i1,j1]=find(a==x1);
[i2,j2]=find(a==y1);
[m,n]=size(i1);
[p,q]=size(i2);
[vp,vb]=size(a);
tto=0;
%寻找不包含起点和终点的线路
for iu=1:vp
vc=a(iu,:);
rpp=find(x1==vc);
rpq=isempty(rpp);
tpp=find(y1==vc);
tpq=isempty(tpp);
if rpq==1&tpq==1
tto=tto+1;
uu(tto)=iu;
end
end
for ey=1:size(uu,2)
eyy=a(uu(1,ey),:);
for ex=1:m
exx=a(i1(ex,n),:);
for ez=1:p
ezz=a(i2(ez,q),:);
mn=size(exx,2);
iq=0;
ih=0;
%寻找exx和eyy的相同元素,赋值到tq
for i=1:mn
for ig=1:mn
if exx(i)==eyy(ig)
iq=iq+1;
tq(iq)=exx(i);
end
end
end
%寻找eyy和ezz的相同元素,赋值到tn
for i=1:mn
for ig=1:mn
if ezz(i)==eyy(ig)
ih=ih+1;
tn(ih)=ezz(i);
end
end
end
if iq~=0&ih~=0 %eyy与exx,ezz都有交点
for di=1:iq
wq=find(tq(di)==eyy); %exx与eyy的相交元素在eyy中的位置
for dh=1:ih
wh=find(tn(dh)==eyy); %ezz与eyy的相交元素在eyy中的位置
if wq<wh
Le=find(x1==a(i1(ex,n),:))-1;
Lf=find(eyy(wq)==a(i1(ex,n),:))-1;
%起点站和第一个转站点在第一条线路上的位置
Lg=find(eyy(wq)==a(uu(1,ey),:))-1;
Lh=find(eyy(wh)==a(uu(1,ey),:))-1;
%中转站点在第二线路上的位置
Lj=find(eyy(wh)==a(i2(ez,q),:))-1;
Lk=find(y1==a(i2(ez,q),:))-1;
%第二个转站点和终点站在第三线路上的位置
if Le<Lf&Lg<Lh&Lj<Lk&(Lf-Le+Lh-Lg+Lk-Lj)<35
disp('起点站第一个转站点第二个转站点终点站在所在线的位置')
weizhi=[Le,Lf,Lg,Lh,Lj,Lk]
disp('转两次站经过的路线');
L=[a(i1(ex,n),1),a(uu(1,ey),1),a(i2(ez,q),1)]
disp('中转站点');
zhongzhuan=[eyy(wq),eyy(wh)]
end
end
end
end
end
end
end
end
8.4 问题二的程序代码
y1=input('finish');
[i1,i2]=find(x1==a)
tt=0;
t=size(i1,1);
for p=1:t
mv=a(i1(p,1),:);
n=size(mv,2);
for tp=1:n
if(mv(tp)>5000&mv(tp)<6000)
tt=tt+1;
mm(tt)=a(i1(p,1),1);
break
end
end
end
disp('起点经过地铁的线路')
disp(mm)
ttt=0
[i1,i2]=find(y1==a);
t=size(i1,1);
for p=1:t
mv=a(i1(p,1),:);
n=size(mv,2);
for tp=1:n
if(mv(tp)>5000&mv(tp)<6000)
ttt=ttt+1;
mmm(ttt)=a(i1(p,1),1);
break
end
end
end
disp('终点经过地铁的线路')
disp(mmm)