在这幅图中找到可能的正方形数量
以下是我今天遇到的一个视觉问题。 这里的问题只是图片中有多少个正方形。
你如何通过代码去解决这样的问题? 此外,如果实际图片没有被处理,你会如何对它进行建模?
PS:我觉得实际的解决方案需要一个规则来定义可以被认为是正方形的东西。 沿着这样的方向说一些东西,即边的长度相等,只要它们适合在封闭的正方形内,就可以由任意数量的分段组成。 我不确定你如何代表一个职位。
如果你可以把它建模为矩阵,那么你需要的唯一信息就是顶点的位置。 然后,对于每个顶点检查同一行中的所有顶点以及每个找到的顶点检查它们的列。 然后删除已处理的顶点。 按照列方式进行操作。 最糟糕的情况是n! (?)
我添加了澄清的代码。
public class SqFinder {
int calculateSquares(int[][] vertices, int n) {
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (vertices[i][j] == 1) {
for (int k = 1; k < n-j; k++) {
if (i + k < n && vertices[i][j+k] == 1 && vertices[i + k][j] == 1 && vertices[i + k][j + k] == 1)
count++;
}
}
vertices[i][j] =0;
}
}
return count;
}
public static void main(String[] args) {
SqFinder a = new SqFinder();
// int [][] test = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
int [][] test = {{1,1,1},{1,1,1},{1,1,1}};
System.out.println(a.calculateSquares(test, 3));
}
}
最简单的方法是循环遍历每个顶点,并检查它是否可以是宽度为1的正方形的左上顶点,然后是宽度为2,等于3的左上角的顶点
编码:你拥有的是一个网络。 将其编码为位于离散二维空间中的网络连接节点。
这个问题实际上是要求您计算符合以下属性的路径数量:
在这种情况下,当(a)如果先前的移动导致y坐标变化,则该移动导致x坐标变化; 或(b)如果先前的移动导致x坐标变化,则该移动导致y坐标变化。
关于这个过程:我在这个页面上看到的最好的建议只是遍历每个节点,并且为每个这样的节点检查所有可能的正方形大小。 这应该避免需要进一步追踪。
如果你有一个更聪明的方法,只要你的路径总是左撇子或者总是右撇子,每个方格都由起始顶点和边长来唯一标识。
链接地址: http://www.djcxy.com/p/11053.html上一篇: Finding the number of possible squares in this picture
下一篇: Gxt combo box selection arrow is not properly aligned in firefox and safari