我正在尝试用机票解决旅行商问题,所以主要的想法是从一个机场开始,只访问所有机场一次并返回原点。
所以例如: 从LAX开始 访问LV,CA,NY 结束LAX。
这是一个经典的图形问题,我们可以将机场表示为节点,将路线表示为边缘,并将价格作为边缘权重。
所以这是最简单的部分,让我感到困惑的是用户希望旅行的日期。例如,我想让用户选择他/她希望旅行的日期,比如从01开始到15结束。所以我想找到一种最便宜的方法。例如,输出将是这样的:
01 - LAX - LV;
04 - LV - CA;
08 - CA - NY;
15 - NY - LAX
所以我理解我可以在边缘上添加额外的属性,但问题是算法如何区分如何遍历图形,例如不选择已经过去的权重最小的边缘。
所以你可以看到我有一个从CA出来的两个边缘(注意边缘格式是DD - 价格,01 - 20表示日期的第一个和成本20),以及如何在多个时候处理这种情况存在于同一节点的边缘。
它也可以被视为三维图,其中第三维是用户旅行的日期。所以主要问题是如何处理这些日期?
希望我明白了,赞赏任何建议
先谢谢。
答案 0 :(得分:1)
我理解你的问题的方式,你需要在特定时间之前到达的最便宜的路径。如果是这种情况,一个可能的答案可能是你仍然只根据航班的价格解决它,同时对于队列中的每个可能的答案(我假设 像Dijkstra这样的方法你保留了多少时间(用于与截止日期比较)。
每当你想要添加可能答案的邻居时,你可以检查它是否在截止日期之前,如果不是,你就会忽略该实例。
总之,你仍然会找到从最便宜到最便宜的所有路径,你选择第一个与你的截止日期不矛盾的路径。