Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查布尔二维列表中的两点是否连接_Python_Multidimensional Array - Fatal编程技术网

Python 检查布尔二维列表中的两点是否连接

Python 检查布尔二维列表中的两点是否连接,python,multidimensional-array,Python,Multidimensional Array,如果二维布尔区域上的两个点是连接的,并且在一个值为真的正方形上只能上下左右移动,有没有快速的方法可以找到? 假设您有以下6x6 2D列表: 在代码中,这将是: bool2DList = [6][6] bool2DList = { True, True, False, False, True, True, False, True, True, False, True, True, False, True, True, F

如果二维布尔区域上的两个点是连接的,并且在一个值为真的正方形上只能上下左右移动,有没有快速的方法可以找到? 假设您有以下6x6 2D列表:

在代码中,这将是:

bool2DList = [6][6]
bool2DList = { True,  True,  False, False, True,  True,
               False, True,  True,  False, True,  True,
               False, True,  True,  False, False, True,
               False, False, False, False, False, True,
               False, False, False, False, True,  True,
               False, True,  True,  True,  True,  True }
绿色方块的值为真,蓝色方块的值为假。我在考虑函数(它可能需要是递归的),在函数中,你可以把一个2D列表作为一个参数,与几个点的元组列表(坐标)和最后一个特殊点的元组列表放在一起,它可以有如下标题:

def FindWay( bool2DList,listOfPoints,specialPointCoord )
在本例中,特殊点为坐标为5的点p;1.让我们想象一下,你将从那个特殊点开始行走。如果不踩在蓝色方块上,你能到达哪些点?在本例中,只有点P4和P5(输出可以是这些点的坐标,即0;5和5;3)。它可能需要递归,但我不知道主体应该是什么样子


谢谢。

恐怕没有简单的方法可以做到这一点。这是一个图形遍历问题,Python没有支持这一点的内置函数。我希望您需要一个简单的实现

非常简单地说,您保留了一个已访问但未处理的节点列表;已处理的节点的另一个列表。步骤如下所示:

def FindWay( bool2DList,listOfPoints,specialPointCoord )
已处理=[] 访问量=[P] 虽然已访问的文件不是空的: 从已访问列表中删除节点a 对于每个节点B,您可以直接从以下位置访问: 如果B是新的(不在访问或处理列表中): 把B列入访问名单 把一个问题列入处理清单

这将找到您可以到达的所有节点。如果您担心某个特定节点,那么在循环中,检查B是否是您的目标节点。当你把B放在访问列表上时,把它放在前面表示深度优先,放在后面表示宽度优先


在此应用程序中,“您可以到达的所有节点”由具有相同布尔标签的边界节点组成。

以下是一个选项,您可以对其进行编码:

A = np.array([[0, 1, 1, 0], [1, 0, 1, 1], [1, 0, 1, 0], [0, 1, 0, 0]]).astype(bool)
print A

[[False  True  True False]
 [ True False  True  True]
 [ True False  True False]
 [False  True False False]]
我们可以根据需要升级标准dfs功能:

def dfs_area(A, start):
    graph = {}
    res = np.zeros_like(A)
    for index, x in np.ndenumerate(A):
        graph[index] = x
    visited, stack = set(), [start]

    while stack:
        vertex = stack.pop()
        x, y = vertex[0], vertex[1]
        if vertex not in visited and graph[vertex] == True:
            visited.add(vertex)
            if x < A.shape[0]-1:
                stack.append((x+1, y))
            if x > 1:
                stack.append((x-1, y))
            if y < A.shape[1]-1:
                stack.append((x, y+1))
            if y > 1:
                stack.append((x, y-1))
    res[tuple(np.array(list(visited)).T)] = 1

    return res

你有任何代码显示在这里。因此,它不是一个代码编写服务。你必须对你的问题更加明确。不,我不太确定如何开始……这不是一个问题。