2016-03-04 68 views
0

我遇到了一个棘手的问题。对大多数人来说,这可能很容易,但我只是没有看到它。停车位预订

有3个停车位可用:A,B和C.所有3个可以同时预订,但不能超过3个预订可以同时发生或我们将用完空间!

我现在的问题可以在我的绘图杰作中看到:http://i.imgur.com/6aFSTHu.png(这表示我正在使用的调度器对象,时间标记在左侧)。

这表示调度器控制带有“预订”的停车位。 这是目前我在做什么的伪代码:

function GetFreeSpace(Reservation Res) 
    boolean intersects; 

    for each Reservation R in ListOfReservationsInSpaceA 
     if (R and Reservation are not the same) 
      if (Res and R intersect) 
       intersects = true; 
       exit for; 
      end if 
     end if 
    next 

    if (intersects = false) 
     ListOfReservationsInSpaceA.Add(Res); 
     Return "A" 
    end if 

    intersects = false 

    // do the same for spots B and C 

    // if all spots are taken, return "none" 
end function 

但是我的代码,如果预订1是上午8点和下午5点之间,并采取点A,预订2采用上午10点至晚上8点,和预订之间的地点B 3在6点到10点之间取得C点(一旦预订1完成),则应该在上午8点到晚上10点之间工作的预订4由于所有点都被拍摄而无法制作。

我希望这个比较清楚。

感谢您的帮助!我使用的语言是VB.NET,但我可以从C,C++,C#,Java等翻译。

+0

目前我在想,当它检测到在C空间的预订路口时,它会尝试重新评估预订的空间并查看是否可以重新分配。虽然这很不方便,但效率非常低,需要很多工作,所以我宁愿避免这种解决方案。 – KingDan

+1

1.看到真正的代码不仅仅是伪代码会很有帮助。特别是'如果(Res和R相交)'2.我想问题是你分别检查每个空间(A,B,C)。交叉检查必须包括在所有这些之中3.在SO上有一些类似的QA,例如, [这里](http://stackoverflow.com/a/7325171/2882256)。这不是一个确切的重复,但它也应该在3个时间范围内工作。 –

+0

你应该包括预订日期,以确保不会有重叠的时间表 –

回答

0

因此,我发现我的原始算法在100%的时间内工作,直到在这种情况下停车位将不会被刷新,预约将被取消。我主要确定我在这里遇到的问题只发生在预订取消期间,所以我在取消代码中添加了“刷新”功能。事情似乎正在起作用。我必须让我的测试人员确定。

无论如何,感谢大家的帮助。