【发布时间】:2015-09-03 09:24:48
【问题描述】:
假设你得到以下数组:
foo = [
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,1,1,1,1,1,0,0],
[0,0,0,1,0,0,0,1,0,0],
[0,0,0,1,0,0,0,1,0,0],
[0,0,0,1,1,1,0,1,0,0],
[0,0,0,0,0,1,0,1,0,0],
[0,0,0,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
]
如何判断 1 的模式是否为闭环?我已经为此苦苦挣扎了几天。我尝试了一个递归循环来查找邻居和单词,但是当你有一个更复杂的模式时它就不起作用了,例如:
foo = [
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,1,1,1,0,0,0,0],
[0,0,0,1,0,1,0,0,0,0],
[0,0,0,1,0,1,0,0,0,0],
[0,0,0,1,1,1,1,1,0,0],
[0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
]
有人有一个神奇的算法来解决这个问题吗? :(
【问题讨论】:
-
您可能希望实现
Dijkstra's Algorithm并将您的数组作为节点进行迭代。然后测试你是否已经回到你的起始位置。 -
对不起,你想让第二个例子算作有一个闭环吗?另外,您需要在循环中使用 0 还是在平方数中需要 4 个 1?
-
我可以看到“Flood Fill”算法在这种情况下工作,就像在油漆程序中的桶填充一样。如果您“填充”一个 0 区域并且它没有溢出数组的边缘,则它必须被关闭。不过,您必须尝试每个单独的 0 区域。
-
是的第二个例子,一个“魔术”函数应该返回一个数组,其坐标只有 1 是一个闭环,我的递归函数可以用第一个例子做到这一点,但是当第二个例子它找到 2 个邻居函数假设一个方向并继续循环,但就像在第二个示例中一样,它可能会得到错误的方向并且没有关闭循环,它很复杂而且我的英语很糟糕我尝试了 Dijkstra 算法,但它适用于多边形,我不知道它是否适合这个问题,并且洪水填充会消耗太多的 cpu 谢谢你们想听更多的想法
-
您可以计算循环的末端数和分叉数。如果循环是闭合的,就会有与末端一样多的分叉(可能更多)
标签: javascript arrays html5-canvas phaser-framework