Red Dot - Represents the initial location
Black Dot - Already occupied
Green - Free to occupy
Destination - Boundry of the matrix [which means either x = 0 or y = 0 or x = 8 or y = 8]
Run Code Online (Sandbox Code Playgroud)
它red dot
可以一次只放置一个动作,并且可以移动到连接到它的绿色六个圆圈中的一个.计算这种迷宫中最短路径的最快方法是什么.
我需要一种算法来查找地图中两点之间的最短路径,其中道路距离由数字表示.
给出的内容:开始城市目的地城市Z.
城市间距离列表:
A - B:10
F - K:23
R - M:8
K - O:40
Z - P:18
J - K:25
D - B:11
M - A:8
P - R:15
我想我可以使用Dijkstra的算法,但它找到了到所有目的地的最短距离.不只是一个.
任何建议表示赞赏.
我的A*算法实现需要一些帮助.当我运行算法时,它确实找到了目标,但路径肯定不是最短的:-P
这是我的代码,请帮我发现错误!我认为可能是重建路径是我的问题,但我不确定.
public class Pathfinder {
public List<Node> aStar(Node start, Node goal, WeightedGraph graph) {
Node x, y;
int tentative_g_score;
boolean tentative_is_better;
FScoreComparator comparator = new FScoreComparator();
List<Node> closedset = new ArrayList<Node>();
Queue<Node> openset = new PriorityQueue<Node>(10, comparator);
openset.add(start);
start.g_score = 0;
start.h_score = heuristic_cost_estimate(start, goal);
start.f_score = start.h_score;
while (!openset.isEmpty()) {
x = openset.peek();
if (x == goal) {
return reconstruct_path(goal);
}
x = openset.remove();
closedset.add(x);
for (Edge e : graph.adj(x)) {
if (e.v == x) {
y = …
Run Code Online (Sandbox Code Playgroud) 默认情况下,flex使用最长匹配规则.有没有办法覆盖这种行为,使其匹配最短的序列?
谢谢
我已经对一个奇怪的问题进行了测试.
我有一个无界的棋盘,N个骑士的起始位置和N个目标位置.
任务是找到所有骑士到达所有目标位置的最小移动次数.
我知道单个骑士的最短路径问题可以通过广度优先搜索来解决,但是如何解决多个骑士呢?
抱歉我的英语,我很少使用它.
在具有负权重和正权重的有向图中使用下面的 SPFA 算法,我们如何检测负循环?
\n\n程序最短路径更快算法(G, s)
\n\n 1 for each vertex v \xe2\x89\xa0 s in V(G)\n 2 d(v) := \xe2\x88\x9e\n 3 d(s) := 0\n 4 push s into Q\n 5 while Q is not empty\n 6 u := pop Q\n 7 for each edge (u, v) in E(G)\n 8 if d(u) + w(u, v) < d(v) then\n 9 d(v) := d(u) + w(u, v)\n 10 if v is not in Q then\n 11 push v into Q\n
Run Code Online (Sandbox Code Playgroud)\n 我使用mysql中的规范化邻接列表设计了加权图.现在我需要找到两个给定节点之间的最短路径.
我试图在PHP中使用Dijkstra但我无法实现它(对我来说太难了).我觉得另一个问题是,如果我使用Dijkstra,我需要考虑所有节点,这在大图中可能效率很低.那么有人有关于上述问题的代码吗?如果有人至少向我展示了解决这个问题的方法,那将会很棒.我已经被困在这里差不多一个星期了.请帮忙.
我正在使用networkx并尝试在图中找到长度为3的所有步行,特别是具有三条边的路径.我试图在networkx文档中找到有关算法的一些信息,但我只能找到图中最短路径的算法.我可以通过特定节点找到路径的长度,例如,如果最短路径为14 - > 15 - > 16,则通过节点14 - > 11 - > 12 - > 16的路径?这是一个示例http://i62.tinypic.com/2ekj602.jpg的图形图像
任务
给定一个整数数组 a 和两个整数 x 和 y。计算数组中元素的数量,使得 `x ? [i] ? y,其中 i 是元素的从 0 开始的索引。
代码限制
少于 48 个字符。
例子
对于 a = [2, 5, 6, 7, 1, 3, 4, 11, 56, 49],x = 1 和 y = 7,输出应为 7。
应计算元素 2、5、6、7、1、3、4。
我累了filter
,reduce
如果不让它超过 48 个字符想不出任何其他可能的方法。
这是通过使用 filter
checkRange=(a,x,y)=>a.filter(i=>i>=x&&i<=y).length
Run Code Online (Sandbox Code Playgroud)
使用 reduce
checkRange=(a,x,y)=>a.reduce((c,i)=>i>=x&&i<=y?++c:c,0);
Run Code Online (Sandbox Code Playgroud)
函数调用示例
a =[95,92,27,55,55,20,40,8,7,45,87,14,44,35,64,84,95,85,69,47,53,49,95,54,97,7,67,31,76,97,7,24,82,61,10,34,34,85,66,96,65,2,84,4,68,74,46,50]
x = 64
y = 76
checkRange(a,x,y) // Expected: 8
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经收到了 50 多个字符……我需要将它们减少到 47 个。
到目前为止的一些提示......
length
.除了 Dijkstra 之外,还有其他方法可以计算近乎完整的图的最短路径吗?我有大约 8,000 个节点和大约 1800 万条边。我已经浏览了“地图上的 a 到 b”线程并决定使用 Dijkstra。我使用 Boost::Graph 库在 Perl 中编写了脚本。但结果并不是我所期望的。使用调用 $graph->dijkstra_shortest_path($start_node,$end_node); 计算一条最短路径大约需要 10 多分钟。
我知道有很多优势,这可能是运行时间缓慢的原因。我是死在水里了吗?还有其他方法可以加快这个速度吗?