我需要解决一个最短路径算法问题(用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
我最近为我的基于代理的模型实现了A*算法,它使用了一个2D数组。搜索的目的是为座席提供通向目标位置的位置列表。我的实现可以工作,但是有时当我执行算法时,它会返回一个替代路径,该路径仍然连接到主路径。我不明白它为什么要这么做。在下面编写代码:
public boolean generatePath(Location startLocation, Location goalLocation) {
setUpStartingPoint(startLocation, goalLocation); //Set up everything before search
bo
在做一个项目的时候,我偶然发现了一个我无法解决的图形算法问题。问题如下:
您有一个有向加权图,并希望在访问指定节点(非常类似于)时,在开始节点和结束节点之间找到最短路径。但是,除了节点和边之外,这个图还有"items“的概念,它驻留在节点上,当您进入该节点时,您就会”拾取“。现在有一个额外的约束,即只有在获得了必要的项( I )的情况下,才能遍历边缘。把它看作是门的钥匙,你需要在能够通过门之前获得一把钥匙。
我只能想到强力的方法能成倍地爆炸。有人能想到更好的办法吗?或者带我去一个解决这个问题的地方?或者让我相信这“很难”(从计算上讲)?谢谢你的帮助!