2016-03-04 67 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%的時間內工作,直到在這種情況下停車位將不會被刷新,預約將被取消。我主要確定我在這裏遇到的問題只發生在預訂取消期間,所以我在取消代碼中添加了「刷新」功能。事情似乎正在起作用。我必須讓我的測試人員確定。

無論如何,感謝大家的幫助。