我正在研究一种算法,在给定的一对点的网格中找到一组非相交路径.对于这些对,这样:(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模型像这样

该算法被开发为深度优先搜索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) 我已经搜索了几天没有任何运气。
堆内存碎片是在微控制器/Arduino 中大量使用 malloc() 和 free() 的结果。
如果使用它们是不可避免的,我如何不时对堆进行碎片整理以确保下一个 malloc() 调用将找到要分配的连续内存?