该算法是解决最短路径问题。
用法
[成本rute] = dijkstra(图形,源,目的地)
注:图是表示边值的矩阵。如果节点与其他节点没有连接,则边值为0。
例子:
求从节点1到节点7的最短路径。
>> g = [0 3 9 0 0 0 0;
0 0 0 7 1 0 0;
0 2 0 7 0 0 0;
0 0 0 2 8;
0 0 4 5 0 9 0;
0 0 0 0 0 4;
0 0 0 0 0 0 0;
];
>> [cost rute] = dijkstra(G,1,7)
它将导致
成本= 15.
rte = [7 6 4 5 2 1]
迪马斯Aryo(2021)。dijkstra算法(//www.tatmou.com/matlabcentral/fileexchange/36140-dijkstra-algorithm), MATLAB中央文件交换。检索。
算法是否假设有向图?
嗨,我用矩阵(16289x16289)尝试了这个函数,表示边缘的值,特别是边缘之间的距离,这个值不是整数。我尝试了很多例子和函数的结果它是错误的。我不明白问题是什么。你能帮助我吗?
你好
我想检查一下你的算法的稳定性,在一个3^7可能的组合中只有一个失败了。
网址在此设置(W是对称的)。
https://graphonline.ru/en/?graph=otGZuBAJBCVGNmhT
w = [0,1,0,1,0,0,0,0,0
1,0,1,0,1,0,0,0,0
0, 1, 0, 0, 1, 0, 0
1, 0, 0, 0, 1, 0, 0
0,1,0,1,0,1,0,1,0
0,0,1,0,1,0,0,0,11
0,0,0,1,0,0,0,1,0
0,0,0,0,1,0,1,0,11
0, 0, 0, 0, 0, 1, 0, 1, 0];
(~ p) = dijkstra算法(w, 3、7)
P =
7 4 3 2 3
p是不可能的
谢谢你的贡献。这对我很有帮助。祝贺你。
你好
我尝试使用代码,下面是错误
使用graph/subsref出错(第7行)
索引不支持。金宝app
setupgraph错误(第6行)
如果g(i,j)== 0
dijkstra错误(第27行)
A = setupgraph (inf, 1);
dijskra错误(第23行)
(成本rute) = dijkstra算法(G, 13日2);
有中文交流一下的么?
伟大的代码
我能用它来验证贝尔曼福特算法吗?
我必须改变什么来实现这一点
好工作!
这是否适用于边缘重量与取决于所拍摄的方向的节点?
大阿尔伯特,我爱你!!!!
你好,
当我尝试测试运行程序时,它说Dijkstra算法需要更多的输入参数来运行。:(
非常好的工作,谢谢。
Albert Carfax - >感谢您的建议,它解决了问题(传递节点1)。
你好,
我目前正在研究我的研究中使用这段代码,它适用于小矩阵非常好,但是当我使用这个代码找到包含3-4个LAC节点的大型网络中的最短路径时,Matlab会让我出错内存以创建内存如此大的矩阵G.如果您对此问题有任何解决方案,请帮助我。谢谢
Albert Carfax—>谢谢!!
你好,
请问我是否可以告诉我是否可以将此算法重写为将分别使用负面的形式,也可以分别存在非正面路径?
谢谢!
如果dijkstra(G,1,2) = 3,为什么dijkstra(G,2,1) = inf ?
为什么它无法定义A.
dijkstra(A, s, d)
未定义的功能或变量'a'。
我发现了错误。总结一下我之前读到的注释和我自己确认的内容,每当路径通过节点1时,代码都会返回一个错误的路由。这是因为代码对图进行了重新排序,使源代码是节点1,而之前的节点1现在给出了源代码以前的索引(第31行:A=exchangenode(A,1,s);)。然而,在输出路由时,索引没有被正确地切换回来。源的索引被切换回(linedijkstra: L=[L s];的第6行),但不是节点1槽中的节点被撞出。因此,如果路由经过原始节点1,看起来就像经过源节点,然后仍然到达源节点。
解决这个问题的方法是,始终将图安排为节点1,或者在listdijkstra.m中进行以下替换:
旧的代码:
l = [l w(index2,1)];
新代码:
如果w(index2,1)== s
L = [L 1];
别的
l = [l w(index2,1)];
结尾
在ListDijkstra中,第6行,而不是具有l = [l s],用l = [s l]替换它。这应该解决问题。
当路由在第一节点(节点1)上时,此代码有一个问题
我仍在寻找这个代码来纠正它的错误。
很好。
在我们的问题中完美地工作。
非常感谢。
有用
此代码中有一个错误。节点1通常由节点4替换,用于包含节点1的路径
我最近发现了这个代码的一个bug。如果路径中包含节点1,则通常会用源节点号替换。
它很棒,谢谢
你能解释你如何定义节点。根本不清楚如何选择源节点和目标节点以及路由如何与启动和结束节点相关?
你好,我尝试了使用这个功能,但我有麻烦....在我的矩阵中我有整个数字,但矩阵是双重(不确定为什么),这个算法不起作用:(
它很棒!是否有一个提供所有路径的版本,而不是仅限最短路径?
有人有这段代码的注释吗?它工作完美,但我想了解每个功能的作用
你好呀,
这个例子有什么问题:
g = [0 1 2;
1 0 0;
2 0 0]
迪杰斯特拉(G, 2、3);
结果:[3 2 2]
你能帮助我吗?
PS:我看到Gautam Marwaha有同样的问题。:(
这段代码大部分工作正常,但在一些情况下失败:
g = [0 1 1 1 1 0 0;
1 0 0 1 0 1 0 1 0;
1 0 0 1 0 1 1 1;
1 1 1 0 1 0 0;
1 0 0 1 0 0 1;
0 1 1 0 0 0 1;
0 0 1 0 1 1 0];
dijkstra(G,3,5)产生[5 3 3]或[3 3 5]。知道为什么会这样吗?
知道这是怎么回事吗?
!
良好的算法。
它对我有用!感谢它。4 / 5,因为我没有在极端情况下测试过。很好! !