1

私はパーコレーションプログラムを作成しています。このプログラムでは、2つの座標をチェックし、それらが特定の半径内にある場合は、それらを辞書(役立つ場合は辞書内のリスト)に追加して、次のような方法で接続されていることを示します。以下:

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

これは始まりですが、アルゴリズムの目的を正確に述べていないため、これは最も効率的な方法ではない可能性があります。

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 に答える
0

この問題に直接辞書は必要ありません。

この問題は、union-find データ構造を使用し、辞書を使用せずに直接解決できます。

代わりに、union-find を実装するときに、辞書だけでなく、辞書を使用することもできます。

于 2012-12-31T11:23:24.673 に答える