我在我的应用程序中使用了稍微修改过的Dijkstra算法,但是它非常慢,我知道必须有更好的方法。我输入的数据是具有指定旅行时间的总线站(大约400个节点和800条路径,最大)。结果深度=4(最大4总线改变或无变化)。
输入数据(巴士路线):
bus_id | location-from | location-to | travel-time | calendar_switch_for_today
XX | A | B | 12 | 1
XX | B | C | 25 | 1
YY | C | D | 5 | 1
ZZ | A | D | 15 | 0
dijkstraResolve(A,D
我需要解决一个最短路径算法问题(用C语言)。
基本上,我得到了一个文件,其中包含(稀疏)矩阵的总行和列数、非零条目(称为门)的数量,以及这些条目(行、列、值)的位置和值。在这个迷宫中,我必须找出从条目(0,0)到任何其他点(位置也从文件中读取)的“最便宜”路径。每过一扇门,成本就会增加,而0的单元格则不需要任何成本。
有一些规则,比如你不能通过连续两个或更多的门,并且某些值为-1的门不能通过。最后,我必须打印出我通过的门的位置(在文件中给出的位置)。我划过多少空单元格并不重要。
无论如何,这里的问题是矩阵可以是10⁵*10⁵或更多...我把非零值存储在所谓的稀疏矩阵中,我想它是有效的:
typ
我有一个图,看起来像这样:节点之间的所有边都有距离= 1。
F
|
E
|
A-B-C-D
| |
G O
| |
H P
| |
I Q
| |
J R
| |
K-L-M-N
我必须找到从A节点到Q的最短路径。我使用的算法如下(借用维基百科):
1 function Dijkstra(Graph, source):
2
3 create vertex set Q
4
5 for each vertex v in Graph:
有n个球保存在一个表上,并且由同一个单根连接的字符串连接(可以是循环的,也可以不是)。编写代码来选择一个球,这样在将整个结构从那个球的高度提升到最小。(algo+code+正确性的数学证明)
注意,我理解在单独的文件中进行单元测试的优点。但为了个人方便,故意将其添加到主要方法中,因此,请不要在反馈中考虑这一点。寻找请求代码评审、优化和最佳实践以及复杂性验证。
复杂性:
O(EV) -时间复杂度
O(V) -空间复杂性
class GraphLiftBall<T> implements Iterable<T> {
/* A map from nodes in t
这是我先前提出的一些问题的延续,和是关于我试图用天台灯尽可能有效地覆盖屏蔽结构的问题。
规则如下:
尽量减少光的重叠
每串灯都有234“长(这很重要,因为我不能启动一个新的灯分支,除非它在另一个分支的末尾)。
把这些当作圣诞彩灯,你有男性和女性的一面:
start (male) end (female) =[}~~~o~~~o~~~o~~~o~~~o~~~o~~~o~~~{=] <- to outlet to other lights ->
所以多股雏菊链只要有雌性就可以插进去,就像这样:
女性插头必须通过男
我有最小堆的Dijkstra实现,我试图将最小堆更改为最大堆以找到最大路径,但我无法找到最大路径,因此输出是错误的,请您帮助我将此实现更改为最大堆?非常感谢
public class DikjstraAlgorithm {
public static void main(String[] args) {
Graph graph = new Graph(9);
for (int i = 0; i < 9; i++) {
graph.addVertex(i);
}
graph.addEdge(0, 1, 4);
graph.addEd