def findcircle(G):
"""
color = 0 hasn't been visited
color = -1 be visited once
color = 1 has been dfs, all children of the spot has been visited
"""
def dfs(G,i,color,is_DAG):
if is_DAG == 0:
pass
else:
r = len(G)
color[i] = -1 #spot i has been visited
#print 'color:',color
#is_DAG = None
for j in range(r):
if G[i][j] != 0:
#print 'i:',i
#print 'j:',j
if color[j] == -1:
is_DAG = 0
break
elif color[j] == 0:
is_DAG,color = dfs(G,j,color,is_DAG)
color[i] = 1
#print 'is_DAG in :',is_DAG
return is_DAG,color
r = len(G)
color = [0] * r #the number of spots
is_DAG = 1
for i in range(r):
#print 'color:',color
#print 'i:',i
if color[i] == 0: #the spot i has not been visited
is_DAG,color = dfs(G,i,color,is_DAG) #DFS from spot i
#print 'is_DAG out :',is_DAG
if is_DAG == 0: #have circle
break
return is_DAG