想象我们有一些牢房,您可以通过门户传送其他牢房,每个牢房都有一些“传送”时间,但是也有一些监护人,而监护人在您所在的牢房中等到他离开的那一刻,以便您可以传送到另一个牢房。找到逃离监狱所花费的最短时间。
总结一下: 我们有一个带有成本的无向图,但也有一个约束条件,如果监护人在牢房中,则必须等到他离开后才能进行传送。
我做了什么:
我执行了通常的dijkstra算法,但是以每笔正常费用,我都检查是否以该费用支付:“该牢房中有监护人吗?”如果是这样,我将检查多少秒,并将其添加到最短时间。 Dijkstra是用min-heap实现的,我根据给定的时刻使用二进制搜索树来检查监护人。另外,可以有1个以上的单元格可以逃逸,我还使用二叉搜索树存储每个可以逃脱的单元格,以便我可以搜索“所有最小值中的最小值”。
您能对此进行更多优化吗? 我的意思是我使用二进制搜索树,最小堆,什么可能需要这么长时间? (对于具有5000个顶点和大约6000条边的图形)