我遇到了一個棘手的問題。對大多數人來說,這可能很容易,但我只是沒有看到它。停車位預訂
有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個時間範圍內工作。 –
你應該包括預訂日期,以確保不會有重疊的時間表 –