我想搜索一个数组,其中包含您在图片中可以看到的模式。我们从一个给定的点(x,y)开始,用红色标记并继续,如图所示:
到目前为止,我的方法是使用一个看起来像这样的自制列表(例如在python代码中):
<div id="result"></div>
但显然这不是一个非常智能的解决方案,而且它不可扩展,所以我必须知道我的数组的大小。 有没有人知道这种搜索背后是否有数学算法?
答案 0 :(得分:0)
不确定这实际上是否是您正在寻找的,但肯定有一种动态生成此列表的算法,因为您知道运行时 bidimensional 数组的大小。
这是Java中的快速草图(我使用Point作为整数对的包装器,只要其equals
和hashCode
具有指向两个成员的明显实现,您就可以使用另一个类)
int max = 5; // replace with the actual size of your matrix
for (int i = 0; i <= max; i++) {
// I use a set to skip ugly checks for duplicates in first iterations
Set<Point2D> coll = new HashSet<>();
// first loop takes care of the sides of your squares (even numbers in your image)
for (int x = -i + 1; x < i; x++) {
coll.add(new Point(i, x));
coll.add(new Point(-i, x));
coll.add(new Point(x, i));
coll.add(new Point(x, -i));
}
System.out.println("STEP = " + (2 * i));
System.out.println((coll));
// second loop takes care of the vertices of your squares (odd numbers in your image)
coll = new HashSet<>();
coll.add(new Point(i, i));
coll.add(new Point(-i, i));
coll.add(new Point(i, -i));
coll.add(new Point(-i, -i));
System.out.println("STEP = " + (2 * i + 1));
System.out.println((coll));
}
该代码段只是在控制台中打印点集合,您可以将它们添加到列表中或直接使用它们。