Tag: dijkstra

Dijkstra在C中的邻接矩阵

我需要在C中使用Dijkstra算法的一些帮助。 我已经生成了我的邻接矩阵,看起来像: int mat[NB][NB] = {{0, 171, MAX, 132, […]}, {171, 0, 30, 39, […]}, , […]}; 我发现了这个实现: http : //www.answers.com/topic/dijkstra-s-algorithm-1但路径是一维数组,我的矩阵是一个二维数组。 有没有办法将一个变换到另一个? 或者也许有人有办法处理这种矩阵。 在此先感谢您的帮助

Dijkstra有一堆。 放松后如何更新堆?

我正在尝试实现Dijkstra算法。 foreach distance d d = INFINITY d[source] = 0 create_heap_based_on_Distances(); while(true) bestedge = heap[0] remove_minimum_from_heap //it will be heap[0] foreach adjacency of bestedge if (weight + bestedge_distance < current_distance) { current_distance = weight + bestedge_distance // Now I have to update heap, how can I do that? } if (heap_empty) break 所以,在放松的过程中,我如何更新堆,以便它具有正确的顺序? 我在该步骤中没有该节点的堆索引。 这是否意味着我必须创建一个新的数组,如nodes[edge] […]

适用于大图的数据结构

我有一个大图,除了邻接列表和c ++ stl中的“邻接矩阵”之外还有其他任何数据结构,或者我可以用于这样一个大图的其他数据结构,实际上我的图的邻接矩阵不适合主要记忆。 我的图是有针对性的,我正在用C ++实现dijkstra算法。 我已经看过以前的post……但我正在寻找一个适合dijkstra的数据结构。 我的意思是一个包含超过1亿个节点和边的图。

对某些Graph操作的最简单算法的建议

这个项目的截止日期很快就会结束,我没有太多时间来处理剩下的事情。 因此,我正在寻找最简单的算法来实现Graph结构上的一些操作,而不是寻找最好的(可能更复杂/耗时)算法。 我需要做的操作如下: 在给定距离X的情况下列出图形网络中的所有用户 给定距离X和关系类型,列出图形网络中的所有用户 在给定一种关系的情况下,计算图形网络上2个用户之间的最短路径 计算图形网络上2个用户之间的最大距离 计算图形网络上最远的连接用户 关于我的Graph实现的一些注意事项: 边节点有2个属性,一个是char类型,另一个是int 。 它们分别代表关系和体重的类型。 图表使用链接列表实现,包括顶点和边。 我的意思是,每个顶点指向下一个顶点,每个顶点也指向不同链表的头部,即该特定顶点的边。 我知道我需要做什么: 我不知道这是否是最简单的,如上所述,但对于2个用户之间的最短路径,我相信Dijkstra算法是人们似乎经常推荐的,所以我想我会接受它。 我一直在搜索和搜索,我发现很难实现这个算法,有没有人知道任何教程或易于理解的东西,所以我可以自己实现这个算法? 如果可能的话,使用C源代码示例,它会有很大帮助。 我看到许多带有数学符号的例子,但这让我更加困惑。 如果我将图形“转换”为邻接矩阵来表示链接权重和关系类型,您认为这会有所帮助吗? 是否更容易执行该算法而不是链接列表? 我可以轻松地实现一个函数来在需要时进行转换。 我这样说是因为我觉得在阅读了几页关于这个主题之后会更容易,但我可能是错的。 我对其他4个操作,建议没有任何想法?

具有有限数量变化的“双图”中的最短路径

假设我们在一组顶点上有两个有向和正加权图(第一个图表示例如铁路,第二个表示公交车道;顶点是公交车站或铁路车站或两者)。 我们需要找到从A到B的最短路径,但我们不能将传输类型改为N次以上。 我试图修改Dijkstra的算法,但它只在一些“不那么平均和复杂”的图形上工作,我想我需要尝试不同的东西。 如何最好地表示“双图”以及如何管理遍历图表的有限数量的更改? 是否有可能在这一个中适应Dijkstra的算法? 任何想法和线索都会有所帮助。 编辑:我忘记了一件事(我认为这很重要):N = 0,1,2,…; 我们可以得出我们喜欢的任何图形表示,当然每两个节点之间可以存在最多4条边(1个公交车道和1个铁路在一个方向上,1个公交车道和1个铁路在第二个方向)。

所有对最短路径问题的最快实现?

我有一个加权图表30k节点160k边,没有负权重。 我想计算从所有节点到其他节点的所有最短路径。 我想我不能假设任何特定的启发式来简化问题。 我试图使用这个Dijkstra C实现http://compprog.wordpress.com/2007/12/01/one-source-shortest-path-dijkstras-algorithm/ ,这是针对单个最短路径问题,调用函数dijkstras ()我所有的30个节点。 你可以想象,它需要很长时间。 目前我没有时间自己编写和调试代码,我必须尽快计算这些路径并将它们存储在数据库中,这样我就可以找到另一个更快的解决方案了,你有没有有小费吗? 我必须在最近的8GB内存的macbook pro上运行它,我想找到一个不超过24小时完成计算的解决方案。 非常感谢提前!! 欧亨尼奥

如何针对2个节点之间的单个最短路径优化Dijkstra算法?

我试图在Dijkstra算法的C中理解这个实现 ,同时修改它,以便只找到2个特定节点(源和目的地)之间的最短路径。 但是,我不确切知道该做些什么。 我看到它的方式,没有什么可做的,我似乎无法改变d[]或prev[]因为这些数组聚合了一些重要数据用于最短路径计算。 我唯一能想到的就是在找到路径时停止算法,也就是说,当mini = destination被标记为已访问时,打破循环。 还有什么我可以做的让它变得更好还是够了? 编辑: 虽然我很欣赏给予我的建议,但人们仍未能完全回答我的质疑。 我想知道的是如何优化算法以仅搜索2个节点之间的最短路径。 到目前为止,我对所有其他一般优化都不感兴趣。 我所说的是,在找到从节点X到所有其他节点的所有最短路径的算法中,如何优化它以仅搜索特定路径? PS:我刚注意到for循环从1开始直到<= ,为什么它不能从0开始直到< ?