我遇到了一个棘手的问题。对大多数人来说,这可能很容易,但我只是没有看到它。停车位预订
有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等翻译。
目前我在想,当它检测到在C空间的预订路口时,它会尝试重新评估预订的空间并查看是否可以重新分配。虽然这很不方便,但效率非常低,需要很多工作,所以我宁愿避免这种解决方案。 – KingDan
1.看到真正的代码不仅仅是伪代码会很有帮助。特别是'如果(Res和R相交)'2.我想问题是你分别检查每个空间(A,B,C)。交叉检查必须包括在所有这些之中3.在SO上有一些类似的QA,例如, [这里](http://stackoverflow.com/a/7325171/2882256)。这不是一个确切的重复,但它也应该在3个时间范围内工作。 –
你应该包括预订日期,以确保不会有重叠的时间表 –