我在一个小型的乘车共享网站上工作,在那里人们可以使用google maps API(纬度和经度)创建中途停留的路线。
我可以在给定路线上创建所有可能的组合(包括中途停留),如下所示:
(Java) Find all possible pairs in an array
示例:如果从A到D的旅程有两个中途停留点(B和C),则有6个可能的“旅程”:
城市A-城市D(最长行程)
A市-C市(一站式旅行)
B市-D市(全程1站)
A市-B市(本次不中途停留)
B市-C市(本站无中途停留)
C市-D市(本站无中途停留)
当一个乘客在一个给定的旅程中预订座位时,其他一些旅程也会根据他们在“金字塔”中的位置预订座位。
我还没有找到一种方法可以通过编程来确定在任何一次旅行中预订座位时哪些行程会受到影响(或不会受到影响)。
我找到的最接近的想法是phpjabbers的一个巴士预订脚本,这个答案是:
Database design for bus reservation
不过,这两个解决方案已经将cities/stops存储在数据库中,而在“我的”解决方案中,stops总是动态的(使用google maps API)。
到目前为止我试过:
在旅程和“大师”旅程之间建立一种EAV关系。
根据中途停留的数量创建类似的“级别”(级别1是最长的行程,级别2是具有n-1个中途停留的行程,依此类推)。
尝试根据起点/终点使用矩阵。
我没有以正确的方式解决这个问题(当然),但我不确定这个问题是否与数学、算法或其他任何东西有关。请原谅我。
我想知道如何解决这个问题:一个公式,算法,一些基本代码或其他什么。
编辑:
为了更好地解释这个问题,这是一个典型的场景:
司机创造了从a到D的三个座位司机在B和C中增加了两个中途停留点,生成6个行程(见上文)。
这四个点或城市(a、b、c、d)是从google maps api中选择的,因此它们不存储在本地。每个点的纬度和经度都“附着”在游乐设施上。
乘客Z预定最长行程的座位(#1)现在所有的游乐设施都只有两个座位很简单。
乘客Y预定乘坐6(从C到D)的座位。现在,乘坐1、3和6次的人少了一个座位(2个有人,1个有人)。
乘客x预定乘坐2(从A到C)的座位。这就是它变得复杂的地方现在,乘坐2、4和5的人少了一个座位(1人有空,2人有空),同样的情况也适用于3人(2人有空,1人有空)。
在这一点上,即使有3名乘客预订了“副驾”的座位,1号机仍有1个座位可用(见上文第3点)这是我的问题,我不知道如何确定不能通过预订乘客X(第4点)来修改骑乘1。
最佳答案
我认为答案在于把从a到D的旅程和B和C中的中途停留储存为从一开始就分开的3条腿,并分别储存完整的骑乘设施,在骑乘设施和腿之间来回连接(忽略组合支腿,如AC或BD。)
乘车表:
乘坐:{id=1,从:“纽约”,到:“纽波特”,legids=[1,2,3],user=john,…}
桌腿:
腿:{id=1,从“纽约”到“纽黑文”,座位=3,rideID=1,…}
航段:{id=2,从“纽黑文”到“新伦敦”,座位数=3,rideid=1,…}
航段:{id=3,从“新伦敦”到“新港”,座位数=3,rideid=1,…}
然后,当一个乘客寻找一个乘坐,你把他的旅程分为腿,并为这些不同的腿寻找乘坐,优先选择腿是同一个乘坐的一部分。
然后,在预订乘车时,您将从旅程的每一段中扣除一个座位,无论这些座位属于哪一段。