-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPercolation.py
38 lines (35 loc) · 1.27 KB
/
Percolation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from random import randint
from UnionFind import UnionFind
from statistics import mean
size=100
site= UnionFind(size*size+2)
test=[]
av=0
def percolate(site):
count=0
vsite=len(site.id)-1
vsite1=len(site.id)-2
while not site.connected(vsite,vsite1):
open=randint(0,len(site.id)-3)
while site.sz[open]>1:
open=randint(0,len(site.id)-3)
site.union(open,open)
count+=1
if (open+1)%size!=0 and site.sz[open+1]>1 and not site.connected(open,open+1):
site.union(open,open+1)
if (open)%size!=0 and site.sz[open-1]>1 and not site.connected(open,open-1):
site.union(open,open-1)
if (open+size)<len(site.id)-2 and site.sz[open+size]>1 and not site.connected(open,open+size):
site.union(open,open+size)
elif open+size>=len(site.id)-2 and not site.connected(open,vsite):
site.union(open,vsite)
if open-size>=0 and site.sz[open-size]>1 and not site.connected(open,open-size):
site.union(open,open-size)
elif open-size<0 and not site.connected(open,vsite1):
site.union(open,vsite1)
return count/(len(site.id)-2)
for i in range(5000):
test.append(percolate(site))
site=UnionFind(size*size+2)
av=mean(test)
print(av)