import numpy.random as rd
import numpy as np
import matplotlib.pyplot as plt

def M(n,p) :
    A = np.zeros((n,n))
    for i in range(n) :
        for j in range(i+1,n) :
            A[i,j] = rd.binomial(1,p)
            A[j,i] = A[i,j]
    return A
    
def NbIsoles(n,p) :
    A = M(n,p)
    nb = 0
    for i in range(n) :
        s = 0
        for j in range(n) :
            s += A[i,j]
        if s == 0 :
            nb +=1
    return nb
    
def Approx(n,p) :
    s = 0
    for _ in range(1000) :
        s += NbIsoles(n,p)
    return s/1000
    
X = list(range(1,11))
for p in [.3,.5,.7] :
    Y = [np.log(Approx(n,p)/n) for n in X]
    plt.plot(X,Y)
plt.show()