如何访问二维网格中的所有点?

问题描述 投票:0回答:1

我试图让 2 个点访问 3 x 3 网格中的所有点。探访点的方法是:

  • 我有点 P1 和 P2,从
    (0, 0)
    开始。
  • P1 从
    (0, 0)
    移动到
    (0, 1)
    (1, 0)
    直到
    (3, 3)
  • 当 P1 到达网格末尾 (
    (3, 3)
    ) 时,P2 应从
    (0, 0)
    更新为
    (0, 1)
    ,然后
  • P1 从 P2 的位置开始,直到网格结束。
  • 这会一直持续到 P2 达到
    (3, 3)

因此,结合 2 个点进行穷举/强力搜索。我试过:

def traversal_methods(num_particles, grid_size):
    particles = [(0, 0) for _ in range(num_particles)]

    while(particles[1] != (grid_size - 1 , grid_size - 1 )):

        for k in range(0, grid_size):
            for l in range(0, grid_size):
                particles[1] = (k, l)
                particles[0] = (0, 0)

                while(particles[0] != (grid_size-1, grid_size-1)):
                    for i in range(k, grid_size):
                        for j in range(0, grid_size):
                            particles[0] = (i, j)

我没有得到预期的结果。我也想把这个延伸到

n-points
。谁能建议一些方法来做到这一点?

python for-loop traversal brute-force
1个回答
0
投票

我也想将其扩展到

n-points
。谁能建议一些方法来做到这一点?

使用列表理解嵌套循环

def grid_create(size_x, size_y):
    grid = [[None for _ in range(size_x)] for _ in range(size_y)]

    for y in range(size_y):
        for x in range(size_x):
            grid[y][x] = (x, y)

    return grid


grid = grid_create(3, 3)

结果(列表列表中的元组为

(x, y)
[y][x]
):

[(0, 0), (1, 0), (2, 0)],
[(0, 1), (1, 1), (2, 1)],
[(0, 2), (1, 2), (2, 2)]

遍历(从P1到P2):

def grid_traverse(grid):

    for y1 in range(len(grid)):
        for x1 in range(len(grid[y1])):
            print('P1 {}'.format(grid[y1][x1]))

            for y2 in range(y1, len(grid)):
                for x2 in range(x1, len(grid[y1])):
                    print('\tP2 {}'.format(grid[y2][x2]))


grid = grid_create(3, 3)
grid_traverse(grid)

结果为

(x, y)
:

P1 (0, 0)
    P2 (0, 0)
    P2 (1, 0)
    P2 (2, 0)
    P2 (0, 1)
    P2 (1, 1)
    P2 (2, 1)
    P2 (0, 2)
    P2 (1, 2)
    P2 (2, 2)
P1 (1, 0)
    P2 (1, 0)
    P2 (2, 0)
    P2 (1, 1)
    P2 (2, 1)
    P2 (1, 2)
    P2 (2, 2)
P1 (2, 0)
    P2 (2, 0)
    P2 (2, 1)
    P2 (2, 2)
P1 (0, 1)
    P2 (0, 1)
    P2 (1, 1)
    P2 (2, 1)
    P2 (0, 2)
    P2 (1, 2)
    P2 (2, 2)
P1 (1, 1)
    P2 (1, 1)
    P2 (2, 1)
    P2 (1, 2)
    P2 (2, 2)
P1 (2, 1)
    P2 (2, 1)
    P2 (2, 2)
P1 (0, 2)
    P2 (0, 2)
    P2 (1, 2)
    P2 (2, 2)
P1 (1, 2)
    P2 (1, 2)
    P2 (2, 2)
P1 (2, 2)
    P2 (2, 2)

没有网格的示例:

def grid_traverse(size_x, size_y):

    for y1 in range(size_y):
        for x1 in range(size_x):
            print('P1 ({}, {})'.format(x1, y1)

            for y2 in range(y1, size_y):
                for x2 in range(x1, size_x):
                    print('\tP2 ({}, {})'.format(x2, y2)


grid_traverse(3, 3)
© www.soinside.com 2019 - 2024. All rights reserved.