【发布时间】:2013-09-21 19:57:16
【问题描述】:
三辆出租车在 1 区排队等待下一个工作 这些出租车的呼号分别是 1、2 和 3; 到达 1 区的出租车排在最前面。
出租车 1 如果先出出租车 2 是第二出而出租车 3 是第三出。
但是,Taxi 3 有一个他之前被分配的工作,这个工作将在 30 分钟内准备好,但这个工作在 2 区;
出租车 3 决定在 1 区等待,看看是否有工作预订,以便在 30 分钟内将他带到 2 区,以便与他在 2 区的工作联系起来。
然后一个接一个地,中心办公室在 1 区接 3 个工作。一旦所有工作被预订,出租车计算机就会调度这些工作。 工作 1 去出租车 1 这个工作在 2 区完成 工作 2 去出租车 2 这个工作在 25 区完成 job3 不能去出租车 3,因为它在 22 区结束,这会使他在 30 分钟内在 2 区上班迟到。
在 job1 上发送 car3 并在 job3 上发送 car1 是有意义的。
使用 c# 编程,我如何才能以最有效的方式调度汽车/工作。所以 Job 1 去 Car 3 Job 2 去 Car 2 而 jJob 3 去 Car 1。
ForEach (myJobObj job in JobsToBedispatched)
{
ForEach (myTaxiObj taxi in taxisQued)
{
if(TaxiCanDoThisJob(job,taxi))
{
DispatchThisJobToThisTaxi(job,taxi)
}
else
{
MarkThisJobNoGoodForThisTaxi(job,taxi)
}
}
}
【问题讨论】:
-
你自己尝试过什么吗?
-
一般?您将工作分配给一辆出租车,然后将剩余工作之一分配给下一辆,依此类推。最后,您会得到“可以完成的工作”的计数。您为工作/出租车的任何可能组合(或直到jobsdone 等于taxicaount)执行此操作,然后选择“最佳”一个。虽然问题可能是“np-hard”?
-
我希望我有更高的智商!