如何在 0 和 1 的网格中识别等腰三角形?

佩顿

考虑一个由随机 0 和 1 组成的 10 * 10 大小的网格。我想确定网格中最高级别的等腰三角形

网格:

1 1 0 1 1 1 1 1 1 1

1 1 1 1 1 1 0 1 1 1

1 1 1 1 0 1 0 1 1 1

1 0 1 1 1 1 1 1 1 1

1 1 1 0 1 0 0 1 1 1

1 1 0 1 1 1 1 1 1 1

0 1 1 1 1 1 1 1 0 0

1 1 1 0 1 1 1 1 0 1

1 1 1 1 1 1 1 1 0 1

1 1 1 1 1 1 1 1 0 1

预期输出:

三角形的最高层为 3

雷克纳克

我假设只找到三角形向上方向,所有1或全部0如:

    1         
  1 1 1       0 
1 1 1 1 1   0 0 0

您可以从顶点开始,找到backtracking我在 中实现的最大三角形 by find_max_triangle然后遍历所有矩阵,并从它的每个点开始。

我们可以通过跳过一些点来减少遍历时间。优化是通过当前的 max_level 修剪 i, j:

def max_triangles(matrix):
    m, n = len(matrix), len(matrix[0])
    max_level = 1

    def find_max_triangle(x, y, v):
        nonlocal max_level
        cur_level = 1
        while True:
            x += 1
            if x == m:
                return
            for i in range(-cur_level, cur_level + 1):
                _y = y + i
                if _y < 0 or _y >= n or matrix[x][_y] != v:
                    return
            cur_level += 1
            max_level = max(max_level, cur_level)

    for i in range(m):
        # optimization: pruning i by current max_level
        if i + max_level >= m:
            break
        for j in range(n):
            # optimization: pruning j by current max_level
            if j - max_level >= 0 and j + max_level < n:
                find_max_triangle(i, j, matrix[i][j])

    return max_level

测试和输出:

matrix = [[1, 1, 0, 1, 1, 1, 1, 1, 1, 1],
          [1, 1, 1, 1, 1, 1, 0, 1, 1, 1],
          [1, 1, 1, 1, 0, 1, 0, 1, 1, 1],
          [1, 0, 1, 1, 1, 1, 1, 1, 1, 1],
          [1, 1, 1, 0, 1, 0, 0, 1, 1, 1],
          [1, 1, 0, 1, 1, 1, 1, 1, 1, 1],
          [0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
          [1, 1, 1, 0, 1, 1, 1, 1, 0, 1],
          [1, 1, 1, 1, 1, 1, 1, 1, 0, 1],
          [1, 1, 1, 1, 1, 1, 1, 1, 0, 1]]

print(max_triangles(matrix))

# output 3

希望能帮到你,还有什么问题可以评论。:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使等腰三角形的JavaScript?

来自分类Dev

如何制作一个内部有空格的等腰三角形

来自分类Dev

如何在R中导入和绘制三角形网格?

来自分类Dev

如何在Java中旋转,缩进和绘制三角形以打印梯形?

来自分类Dev

在 Python 中打印数字的等腰三角形

来自分类Dev

在 C3 中创建等腰三角形

来自分类Dev

如何在Android中绘制复杂的形状,包含三角形,矩形和笔触

来自分类Dev

等腰三角形周围加双边框的算法

来自分类Dev

用两个点绘制等腰三角形/箭头

来自分类Dev

如何用QPainter绘制和填充三角形?

来自分类Dev

如何使用CSS制作div三角形的顶部和底部?

来自分类Dev

如何计算三角形的双法线和切线?

来自分类Dev

如何使用OpenGL和Haskell绘制三角形

来自分类Dev

如何使用现代OpenGL和Python旋转三角形

来自分类Dev

如何正确放置和设计文字后的三角形

来自分类Dev

如何计算三角形的双法线和切线?

来自分类Dev

如何使用OpenGL和Haskell绘制三角形

来自分类Dev

如何防止 Primefaces 在子菜单文本和三角形图标之间换行?

来自分类Dev

如何使用 QT 绘制三角形和菱形

来自分类Dev

如何创建带有边框和背景属性的三角形 div?

来自分类Dev

如何理解JavaFX三角形网格?

来自分类Dev

给定三个点的坐标,如何确定所定义的三角形是等边,等腰还是斜角?

来自分类Dev

如何在STL加载的BufferGeometry中平滑网格三角形

来自分类Dev

如何在3D网格上找到连接的三角形

来自分类Dev

如何在OpenGl中计算三角形网格的顶点法线?

来自分类Dev

R / ggplot2 /如何从散点图中的连接点移动到实心和透明三角形?

来自分类Dev

Fabric JS:如何同时为三角形的顶部和左侧位置设置动画?+动画错误

来自分类Dev

如何使用边缘和内部镶嵌因子完成三角形面片镶嵌?

来自分类Dev

如何用中心坐标和一个点的坐标创建一个三角形?

Related 相关文章

  1. 1

    如何使等腰三角形的JavaScript?

  2. 2

    如何制作一个内部有空格的等腰三角形

  3. 3

    如何在R中导入和绘制三角形网格?

  4. 4

    如何在Java中旋转,缩进和绘制三角形以打印梯形?

  5. 5

    在 Python 中打印数字的等腰三角形

  6. 6

    在 C3 中创建等腰三角形

  7. 7

    如何在Android中绘制复杂的形状,包含三角形,矩形和笔触

  8. 8

    等腰三角形周围加双边框的算法

  9. 9

    用两个点绘制等腰三角形/箭头

  10. 10

    如何用QPainter绘制和填充三角形?

  11. 11

    如何使用CSS制作div三角形的顶部和底部?

  12. 12

    如何计算三角形的双法线和切线?

  13. 13

    如何使用OpenGL和Haskell绘制三角形

  14. 14

    如何使用现代OpenGL和Python旋转三角形

  15. 15

    如何正确放置和设计文字后的三角形

  16. 16

    如何计算三角形的双法线和切线?

  17. 17

    如何使用OpenGL和Haskell绘制三角形

  18. 18

    如何防止 Primefaces 在子菜单文本和三角形图标之间换行?

  19. 19

    如何使用 QT 绘制三角形和菱形

  20. 20

    如何创建带有边框和背景属性的三角形 div?

  21. 21

    如何理解JavaFX三角形网格?

  22. 22

    给定三个点的坐标,如何确定所定义的三角形是等边,等腰还是斜角?

  23. 23

    如何在STL加载的BufferGeometry中平滑网格三角形

  24. 24

    如何在3D网格上找到连接的三角形

  25. 25

    如何在OpenGl中计算三角形网格的顶点法线?

  26. 26

    R / ggplot2 /如何从散点图中的连接点移动到实心和透明三角形?

  27. 27

    Fabric JS:如何同时为三角形的顶部和左侧位置设置动画?+动画错误

  28. 28

    如何使用边缘和内部镶嵌因子完成三角形面片镶嵌?

  29. 29

    如何用中心坐标和一个点的坐标创建一个三角形?

热门标签

归档