Algorithm 高效编写航线路由算法
鉴于:Algorithm 高效编写航线路由算法,algorithm,Algorithm,鉴于: 航班数据库(出发城市、到达城市、出发时间、到达时间) 问题: 如果出发时间不重要,在两个城市之间登记服务的最有效算法是什么?考虑到我们希望最小化停留时间(但仍然高于标称最小值,即20分钟),并尽量减少停留次数(如果有一条不停的路线,这是微不足道的,但如果不是,找到一条在两条连接上的连接路线等等,以合理的停留时间,不那么琐碎)。 如果可能的话,我不想专门将任何机场标记为枢纽机场,以便开放点对点航线网络的可能性 应该有一个选项来指定所需的(近似的)出发时间。如果它有自己的算法与第一个算
- 航班数据库(出发城市、到达城市、出发时间、到达时间)
- 如果出发时间不重要,在两个城市之间登记服务的最有效算法是什么?考虑到我们希望最小化停留时间(但仍然高于标称最小值,即20分钟),并尽量减少停留次数(如果有一条不停的路线,这是微不足道的,但如果不是,找到一条在两条连接上的连接路线等等,以合理的停留时间,不那么琐碎)。
- 如果可能的话,我不想专门将任何机场标记为枢纽机场,以便开放点对点航线网络的可能性
- 应该有一个选项来指定所需的(近似的)出发时间。如果它有自己的算法与第一个算法分开,这是可以的
这个项目的代码语言还没有被选择(可能是一种.NET语言,因为快速表单会派上用场),所以伪代码算法是首选。如果添加的信息可能有所帮助,我将密切关注后续问题。在底部,您将把您的城市网络视为一棵树,出发城市作为根,每个出发航班都是指向一个孩子的指针。您将在树中执行递归深度优先搜索,以查找到目标的所有路径,但同时检查循环并中止导致循环的任何路径 当你找到可行的路径时,你可以将找到的最短路径保持为奇异解;或者,如果您想在此基础上进行选择,请保留一个较大的路径子集,并根据出发时间周围的一些标准进行分层
根据数据库和节点的具体情况,您还可以加入其他规则来缩短路径搜索,例如,如果您碰巧知道出发点和目的地相距1000英里,而您追踪到的路径已经飞行了3000英里,但您仍然不在,请不要管它,继续进行下一个路径搜索。或,权重是对长时间等待和多次停靠的某种惩罚。分解响应后,我尝试一种基于手动标记“连接”机场的算法。这样就省去了对数百个可能无法连接到任何地方的机场的浏览(你最后一次从纽约通过锡达拉皮兹连接到东京是什么时候?)。这涵盖了最多2次中途停留,在2次中途停留后,我将使用特殊情况算法,一个完整的树搜索,或者标记路线“未服务”(许多真正的航空公司都会这样做,但对于游戏来说,这应该是玩家可以自定义的) 目前的模式是这样的: 找到不停
- 有从始发机场到目的地机场的直达路线吗?太好了!返回直达名单(请求算法可以决定如何处理)
- 汇集从始发机场到“连接”机场(所有枢纽和重点城市)的所有航班
- 汇集从这些“连接”机场(所有枢纽和重点城市)抵达目的地机场的所有航班
- 创建所有可能的路径(源连接目标)
- 将此列表修剪为所有“可能”路径(消除不连续的连接,消除所有在20分钟内停机的路径)
- 按总旅行时间(航班时间+停留时间)对该列表进行排序
- 汇集从始发机场到“连接”机场(所有枢纽和重点城市)的所有航班
- 汇集所有从任何“连接”机场(所有枢纽和重点城市)抵达目的地机场的航班
- 汇集始发机场飞往的“连接”机场和飞往目的地的“连接”机场之间的所有航班。(枢纽到枢纽)
- 创建所有可能的路径(源连接目标)
- 将此列表修剪为所有“可能”路径(消除不连续的连接,消除所有在20分钟内停机的路径)
- 按总行程时间对该列表进行排序