小编Isl*_*afa的帖子

在大型网格中路由路径的最佳方法是什么?

我正在研究一种算法,在给定的一对点的网格中找到一组非相交路径.对于这些对,这样:(9,4)和(12,13) 样本网格

输出应该是这样的:

    9,10,11,7,3,4

    13,14,15,16,12
Run Code Online (Sandbox Code Playgroud)

如果无法路由所有路径,则打印"已阻止"

首先,我搜索了一个已经制作的算法,以找到图形或网格中2个点之间的所有简单路径.我在@Casey Watson和@svick 这里找到了这个..它的效果非常好,但仅适用于小图.

我将它转换为C#.NET并对其进行了一些增强,以便能够找到最大长度为X的路径.并在其上构建我的总算法.

我建的那个在小图中工作得很好..这是8x8网格中的9对路线.. 在此输入图像描述

但它需要花费大量时间在较大的像16x16甚至是我打算做的最后一个,这是一个16x16x2的3D模型像这样

8x8x2网格

该算法被开发为深度优先搜索RECURSIVE算法,但是花费了大量时间将值返回给用户.所以我决定将它转换为循环而不是递归调用,以便我可以从.NET中的yield return功能中受益,但它仍然没有任何帮助.

算法的循环版本在不到一秒的时间内找到一对点的路径,但递归的路径花费超过90秒.

在此输入图像描述

当我尝试使用2对时,循环版本需要大约342秒,但递归版需要大约200秒.

在此输入图像描述

所以我不知道哪个更快..!?递归或循环一个..

我真的想知道这样做的最好方法..

注意:节点编号中的第一个数字确定图层(从1开始).

这是代码

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;

    namespace AlgorithmTest
    {
     struct Connection
    {
    public int FirstNode;
    public int SecondNode;

    public Connection(int N1,int N2)
    {
        FirstNode = N1;
        SecondNode = N2;
    }
}
enum Algorithm
{ Recursion, Loops }

public class Search
{

    private const int MAX = 15;

    private const int …
Run Code Online (Sandbox Code Playgroud)

.net c# performance

9
推荐指数
1
解决办法
1439
查看次数

有没有办法处理 AVR/Arduino 微控制器中的堆内存碎片?

我已经搜索了几天没有任何运气。

堆内存碎片是在微控制器/Arduino 中大量使用 malloc() 和 free() 的结果。

如果使用它们是不可避免的,我如何不时对堆进行碎片整理以确保下一个 malloc() 调用将找到要分配的连续内存?

microcontroller avr arduino avr-gcc atmel

4
推荐指数
1
解决办法
2710
查看次数

标签 统计

.net ×1

arduino ×1

atmel ×1

avr ×1

avr-gcc ×1

c# ×1

microcontroller ×1

performance ×1