1

我正在编写一个渗透程序,通过它检查两个坐标,如果它们在给定的半径内,我将它们添加到字典(字典中的列表,如果有帮助)以显示它们是通过类似的东西连接的以下:

def connected(x1,y1,x2,y2,radiusvalue):
    radius = ((x1-x2)**2 + (y1-y2)**2)**.5
    if radius <= radiusvalue:
                # Search pre-existing dictionaries
                # Create new dictionary and add (x1, y1) & (x2, y2)
                #   or add to pre existing dictionary containing either (x1, y1) 
                #   or (x2, y2)
    else:
        return False

但是,我被注释掉的部分卡住了,主要是因为我不知道如何在没有 d = {datahere} 的情况下创建字典。如果无法做到这一点,我将如何去做我想做的事情?

谢谢。

4

2 回答 2

0

对于这个问题,您不需要直接使用字典。

这个问题可以直接用union-find数据结构解决,不用字典。

相反,当您实施 union-find 时,您可以选择使用字典,但不仅限于此。

于 2012-12-31T11:23:24.673 回答
0

这是一个开始,但您并没有确切说明该算法的用途,因此这可能不是最有效的方法。

def add(pointdict,x1,y1,x2,y2):
    # If (x1,y1) isn't present yet, create an empty list of points
    if (x1,y1) not in pointdict:
        pointdict[(x1,y1)] = []
    # Add (x2,y2) to the list of points connected to (x1,y1)
    pointdict[(x1,y1)].append((x2,y2))

def connected(x1,y1,x2,y2,radiusvalue,pointdict):
    radius = ((x1-x2)**2 + (y1-y2)**2)**.5
    if radius <= radiusvalue:
        # Connect (x1,y1) to (x2,y2)
        add(pointdict,x1,y1,x2,y2)
        # Connect (x2,y2) to (x1,y1)
        add(pointdict,x2,y2,x1,y1)
        return True
    else:
        return False
于 2012-12-31T11:03:53.037 回答