C# 城市公交

C# 城市公交,c#,algorithm,data-structures,graph,graph-theory,C#,Algorithm,Data Structures,Graph,Graph Theory,我正在开发一个旅行计划网站。目前,在这种情况下,有几件事是简单的,即目前网站只能规划公交线路,公交时刻表目前不可用。因此,这意味着我们只在db中存储了公交线路,因为公交时刻表不可用,所以乘客的等待时间也不相关。可用的是一辆公共汽车在两个站点之间行驶的时间和距离 我认为使用一个无向加权图来存储每辆公交车的每一个公交站点的时间和距离成本将是一种可行的方法。然后,我可以使用Dijkstra算法根据用户的偏好,根据时间或距离计算用户输入的两个位置之间的最短路径。我会通过简单的C#函数找出是否需要两辆或三

我正在开发一个旅行计划网站。目前,在这种情况下,有几件事是简单的,即目前网站只能规划公交线路,公交时刻表目前不可用。因此,这意味着我们只在db中存储了公交线路,因为公交时刻表不可用,所以乘客的等待时间也不相关。可用的是一辆公共汽车在两个站点之间行驶的时间和距离

我认为使用一个无向加权图来存储每辆公交车的每一个公交站点的时间和距离成本将是一种可行的方法。然后,我可以使用Dijkstra算法根据用户的偏好,根据时间或距离计算用户输入的两个位置之间的最短路径。我会通过简单的C#函数找出是否需要两辆或三辆公交车,如果公交线路在车站相交,然后乘客使用这些交叉站换车。但每辆巴士都会有一张单独的图表。另一种方法(不确定是否正确)是使用包含城市每个公交站点的图形作为节点,然后使用此技术找出两个站点之间的行驶方式。哪种方法是正确的?我应该用*算法代替Dijkstra算法吗


设计的几个要点:我希望应用程序可以扩展,以便在需要时添加其他交通工具。此外,如果可能的话,也可以在不对网站进行重大更改的情况下添加公交车时间。我在这里见过不少从事复杂交通项目的专家。因此,请帮助我以最可扩展、模块化和可扩展的方式实现此功能的最佳方法

图形必须是一个方向图——道路两侧的公交车站(即使在像英国这样很少有中间带的国家)也不是同一个车站

我认为最重要的优化是将可以改变路线的车站和不能改变路线的车站分开。然后,你只需要考虑站,你可以改变路线作为中间站在您的图表。这会使图表变得很小,这样Dijkstra就可以了


我通过简单地将节点从图中剪切出来,并用一条增加长度的边连接两个相邻节点,来区分只有两条边的节点。然后我在这个简化的图上进行寻路,这应该会快得多。也就是说,只考虑有可能切换路线的站点。

< P>我去年夏天启动了一个类似的应用程序,但从来没有完成过,但是我在这个图上有一些建议,以及如何构造你的数据。 我的计划是将每个站点作为一个节点,并在每一个节点之间设置一条路径,以便每次公共汽车经过时都能通过。例如,如果总线在6小时内每半小时停止一次,那么两个节点之间将有12条路径。时间是路径“成本”背后的主要驱动因素,因此通常选择最快的路径

在启动之前,应用程序将在接下来的5小时内查询数据库中的所有路径(根据需要进行调整)。然后,它将使用Dijkstra的算法进行运算

其他需要考虑成本的因素包括路线的实际资金成本、换乘(及其成本)、没有屋顶的站点(如果天气不好的话)等

这个计划对我很有效。我住在一个有3个公交系统的地区


最后,以类似于的方式构造数据可能会对您有所帮助,因为许多机构都会生成这种类型的数据,您可以导入。

也许您可以使用paddydubs work for found

我为一个测试应用程序编写了这样一个算法。每一站我都有一本字典,作为出发点和目的地。该算法是递归的。递归的每一步都是这样的:给定源和目标,它将生成进入目标的路由列表,离开源的路由列表。如果有任何公共站点,我们完成了,我们报告路线。若并没有,那个么我为源生成相邻的停止,并递归。下一个递归生成sink、recurse的相邻站点列表。在递归之前,我当然记录了前面的路径,最后我会有一个列表

我确实记得我必须设置一些截止条件,因为递归有时会卡在某些“坏”区域

我还看了这篇论文:

www.citeulike.org/user/rchauhan/article/819528


我很感兴趣的是,您是否设法以不同的方式解决了这个问题。

您是否建议为每辆公交车绘制一个图表,并使用Dijkstra来获得最短路径?我正在考虑实施“更改公交车”功能:1)在具有目的站或源站的公交车内分别搜索公共站点。2) 现在,在这些公交线路中,找到公共点和目的地/源站之间的最短距离3)最后将这两个结果结合起来,以获得全程的详细信息,并将其与其他组合进行比较,以获得最短的路线。我想优化的另一种方法是将两点之间的最短路线的详细信息存储在搜索“快速访问”表后,即可对其进行访问。此表将随着时间的推移而增长,使用几次后,搜索结果将更快。我也可以在bg中为每个站点(nxn组合)手动运行此过程。不,我的想法是省去只有一条路线通过的站点,因为它们不会发生任何有趣的事情。非常有道理!我不知道我怎么会错过这个。它变得越来越复杂,因为我不得不思考:(