Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- En esta version modifique:
- 1ero. ClanWithNonVisible
- 2do. ClanWith
- Como FindUnionDecomposition pero que la clase Edge devuelva from y to, esto para corregir la funcion pack.
- OjO ver quiza habra que modificar el howClansAreSeen*
- '''
- def EdgeOf(FromTo):
- here = False
- j=0
- while not here and j< len(EdgesNodes):
- if FromTo == str(EdgesNodes[j]):
- here = True
- else:
- j+=1
- if here:
- return EdgesNodes[j]
- else:
- print 'Edge not found'
- '''
- Para trabajar con un grafo dirigido la funcion tendria que cosiderar las aristas del nodo a los elementos del clan
- Copia los nodos del clan a una nueva lista y elimina el clan no visible, OurClanList.
- Obtienen los elementos de tipo Edge que van de node a OurClanList
- y ve nodo a nodo, si las aristas del nodo no visible y de node hacia un mismo nodo, estan en la misma clase de equivalencia.
- '''
- def ClanWithNonVisible(NonVisible,ClanList,node):
- NodeToOurClan = []
- NewEdges =[]
- OurClanList = ClanList[:]
- OurClanList.remove(NonVisible)
- for i in OurClanList:
- NodeToOurClan.append(EdgeOf(str(i)+','+node))
- #print 'Del nodo a los restantes del clan:'
- #for i in NodeToOurClan:
- # print str(i)
- #Ver si estos colores son los mismos desde el nodo no visible
- TheyAreClans = True
- j=0
- while TheyAreClans and j <len(OurClanList):
- n = EdgeOf(str(OurClanList[j])+','+str(NonVisible))
- if Find(n)== Find(NodeToOurClan[j]):
- j+=1
- else:
- TheyAreClans = False
- return TheyAreClans
- '''
- Input: clan.nodes lista de strings y node un str.
- Output: True/False, str: el nodo con el que node hace clan
- Busca si alguno de los vertices existentes tiene Edges hacia el resto de los nodos que esten en la misma clase de equivalencia que las edges que conectan con node (desde cada vertice del clan)
- '''
- def ClanWith(ClanList,node):
- print 'ClanWith'
- NewEdges = []
- ClanToNode =[]
- for i in ClanList:
- #%print 'in ClanList:', i
- ClanToNode.append(EdgeOf(str(i)+','+node))#esto en lugar de #% los ve a todos y no tendria porque tronar
- #%NewEdges.append(str(i)+','+node)
- #NewEdges son los strings de las aristas que van de los elementos del clan al nodo
- #%for i in NewEdges:
- #% print i
- #% here = False
- #% j=0
- #% while not here and j< len(EdgesNodes):
- #% if i == str(EdgesNodes[j]):
- #% here = True
- #% else:
- #% j+=1
- #% if here:
- #% ClanToNode.append(EdgesNodes[j])
- #NodeToClan son los Edge de los elementos del clan al nodo
- print 'Aristas encontradas:'
- for i in ClanToNode:
- print str(i)
- i=0
- ClanFound= False
- while not ClanFound and i<len(ClanList):
- ActNode = ClanList[i]
- same=True
- j=0
- while same and j <len(ClanList):
- if i!=j:
- n = EdgeOf(str(ClanList[j])+','+str(ClanList[i]))
- if Find(n)== Find(ClanToNode[j]): #ClanToNode[j] =str(ClanList[j])+','+node)
- j+=1
- else:
- same = False
- else:
- j+=1
- if same==False:
- i+=1
- else:#elif j == len(ClanList):Solo puede hacer clan con un elemento y por lo tanto sale al encontrarlo
- ClanFound=True
- if ClanFound:
- return ClanFound, ClanList[i] #True/False,SomeNode
- else:
- return False,''
- '''
- Input: Lista de Edges NonVisibleClans
- Output: Devuelve los nodos ya visibles, separados segun el color por el que son vistos (*comprobar si es asi)
- y de vuelve los nodo como nodos individuales, str...
- '''
- def Split(NonVisibleClans,node):
- print 'Split: ', NonVisibleClans
- SplitEdges=[]
- SplitR=[]
- SplitNodes =[]
- SplitNonVisible=[]
- SplitD={}
- NewNodes = []
- NewClans = []
- for i in CCT[0]:
- SplitD.setdefault(i, [])
- for Clan in NonVisibleClans:
- print Clan
- #for clan in Clan:
- # print clan
- # SplitEdges.append(str(clan)+','+node)
- SplitEdges.append(str(Clan)+','+node)
- print SplitEdges
- for i in range(len(SplitEdges)):
- print 'Arista a buscar', SplitEdges[i]
- here = False
- j = 0
- while not here and j< len(EdgesNodes):
- if SplitEdges[i] == str(EdgesNodes[j]):
- here = True
- else:
- j+=1
- if here:
- print 'Arista encontrada:'
- SplitD[Find(EdgesNodes[j])].append(str(EdgesNodes[j].EdgeFrom()))
- #SplitR.append(str(EdgesNodes[j].EdgeFrom()))
- for i in SplitD.values():
- if i!=[] and i not in SplitR:
- SplitR.append(i)
- else:
- print 'Arista no encontrada, split sobre el nodo', NonVisibleClans[i]
- SplitR.extend(Split(NonVisibleClans[i],node)[0])
- for i in SplitR:#lista de listas
- print 'el nodo/clan es: ', i,'con tamanio: ', len(i)
- if len(i)==1:
- SplitR.insert(SplitR.index(i),i[0])
- SplitR.remove(i)
- if i[0] not in NewNodes:
- NewNodes.append(i[0])
- print 'por lo tanto es un nodo'
- else:
- print 'por lo tanto es un clan'
- if i not in NewClans:
- NewClans.append(i)
- #print 'Nuevos nodos', NewNodes
- #print 'Nuevos clanes', NewClans
- return SplitR,NewNodes,NewClans
- #return SplitR
- def ClanGenerator(NodeList):
- if len(NodeList)== 2:
- NewClan = MyClan('complete')
- NewClan.add_nodes_from(NodeList)
- else:#if len(i)>2 :
- print NodeList
- print 'tamanio de i',len(NodeList),'i[0]',NodeList[0],',',NodeList[1],'i[1]'
- same = True
- InitialColor = Find(EdgeOf(str(NodeList[0])+','+str(NodeList[1])))
- n = 0
- while same and n <len(NodeList)-1:
- j = n+1
- while same and j < len(NodeList):
- if Find(EdgeOf(str(NodeList[n])+','+str(NodeList[j])))== InitialColor :
- j+=1
- else:
- same = False
- if j==len(i):
- n+=1
- if same:
- NewClan = MyClan('complete')
- else:
- NewClan = MyClan('primitive')
- NewClan.add_nodes_from(i)
- return NewClan
- '''
- Input: NodeList Lista de str, nodos a compactar
- Output: Actualiza EdgesNodes, agregando las aristas que se generan al compactar los nodos de entrada
- como decidir si se compacta o no: se compactara cuando en ese momento se tenga almenos un nodo que los haga clan, i.e. que ya los este compactando.
- '''
- def Pack(NodeList):
- print 'Make a clan to:'
- for k in NodeList:
- print k
- Edges = []
- for i in EdgesNodes:
- frm = i.EdgeFrom()
- to = i.EdgeTo()
- for j in NodeList:
- #if str(j) == frm and '[' not in to and to not in NodeList and i not in Edges:
- if str(j) == frm and '[' not in to and i not in Edges:
- notinNodeList = True
- c=0
- while notinNodeList and c<len(NodeList):
- if to in NodeList[c]:
- notinNodeList = False
- else:
- c+=1
- if notinNodeList:
- Edges.append(i)
- print '_______elementos de NodeList en:____________'
- for i in Edges:
- print str(i), Find(i)
- i = 0
- while i < len(Edges):
- edge = str(Edges[i])
- to = Edges[i].EdgeTo()
- j = i+1
- pack = True
- ine = False
- InitialColor = Find(Edges[i])
- while pack and j<len(Edges):
- thisto = Edges[j].EdgeTo()
- if to == thisto:
- if InitialColor == Find(Edges[j]):
- ine = True
- j+=1
- else:
- pack = False
- else:
- j+=1
- if pack and ine:
- k = Edge(str(NodeList),',',to)
- l = Edge( to,',',str(NodeList))
- EdgesNodes.append(k)
- EdgesNodes.append(l)
- MakeSet(k)
- MakeSet(l)
- Union(Edges[i],k)
- Union(Edges[i],l)
- elif pack == False:
- #Eliminar todas las Edges con ese to
- #Edges.remove(Edges[j])
- l=j
- while l< len(Edges):
- thisto = Edges[l].EdgeTo()
- if to == thisto:
- Edges.remove(Edges[l])
- l+=1
- i+=1
- #print '--------Aristas finales----------'
- #for i in EdgesNodes:
- # print str(i), Find(i)
- '''
- Input: Lista de objetos Edge
- Output: Devuelve true si todas las aristas en EdgeList tienen el mismo color
- '''
- def EdgesHaveSameColor(EdgeList):
- Same = True
- InitialColor= Find(EdgeList[0])
- i = 1
- while Same and i < len(EdgeList):
- if InitialColor != Find(EdgeList[i]):
- Same = False
- else:
- i+=1
- return Same
- '''
- Input: MyClan Clan,str node
- Output: 2 Lists of Edge type y dos listas de string q representa los nodos no visibles y los visibles.
- SameColorAsClan, VisibleClans, NonVisibleClans
- '''
- def HowClansAreSeen(Clan,node):#MyClan Clan, str node
- NewEdges=[]
- EdgesNodesList =[]
- SameColorAsClan=[]
- VisibleClans=[]
- NonVisibleClans=[]
- SameColorTo = []
- for i in Clan.nodes:
- NewEdges.append(str(i)+','+node)
- for i in range(len(NewEdges)):
- print NewEdges[i]
- here = False
- j=0
- while not here and j< len(EdgesNodes):
- if NewEdges[i] == str(EdgesNodes[j]):
- here = True
- else:
- j+=1
- if here:
- EdgesNodesList.append(EdgesNodes[j])
- #print str(EdgesNodes[j]),Find(EdgesNodes[j])
- else:
- to = Clan.nodes[i]
- NonVisibleClans.append(to)
- #print to
- #for i in NewEdges:
- # for edge in EdgesNodes:
- # if i==str(edge):
- # print i
- # EdgesNodesList.append(edge)
- if Clan.clantype == 'complete':
- #encuentra el color del clan
- e = str(Clan.nodes[0])+','+str(Clan.nodes[1])
- j = 0
- i = EdgesNodes[j]
- while e != str(i) and j<len(EdgesNodes):
- i = EdgesNodes[j]
- j+=1
- colorclan =Find(i)
- for c in range(len(EdgesNodesList)):
- #try:
- if colorclan != Find(EdgesNodesList[c]):
- VisibleClans.append(EdgesNodesList[c])
- #p =str(EdgesNodesList[c])
- #VisiblePoints.append(p[:p.index(',')])
- else:
- SameColorAsClan.append(EdgesNodesList[c])
- #except:
- # NonVisibleClans.append(EdgesNodesList[c])
- else:
- for c in range(len(EdgesNodesList)):
- #try:
- #Find(EdgesNodesList[c])
- VisibleClans.append(EdgesNodesList[c])
- #p =str(EdgesNodesList[c])
- #VisiblePoints.append(p[:p.index(',')])
- #except:
- # NonVisibleClans.append(EdgesNodesList[c])
- #print 'color clan: ', colorclan
- #print 'visible clans:'
- #for i in VisibleClans:
- # print str(i)
- #print 'non visible clans:'
- #for i in NonVisibleClans:
- # print str(i)
- #print 'same color as clans:'
- #for i in SameColorAsClan:
- # print str(i)
- return SameColorAsClan,VisibleClans, NonVisibleClans #,VisiblePoints
- #Hacer Pack al final y cuando se crean nuevos clanes
- def AddNode(Clan,node): #MyClan Clan, str node
- print 'Clan nodes: ',Clan.nodes
- print 'Clan type: ',Clan.clantype
- if len(Clan.nodes)==1:
- #print Clan.nodes[0]
- if '[' not in str(Clan.nodes[0]):
- Clan.add_node(node)
- #print 'un nodo habia'
- else:
- #print 'un clan habia'
- ActualNode = Clan.nodes[0]
- for i in ActualNode:
- Clan.add_node(i)
- Clan.remove_node(ActualNode)
- AddNode(Clan,node)
- #Pack(Clan.nodes)#la regla del compactar no se cumple aqui, pero lo voy a dejar
- else:
- HCAS = HowClansAreSeen(Clan,node)
- SameColorAsClan = HCAS[0]
- VisibleClans = HCAS[1]
- NonVisibleClans = HCAS[2]
- if Clan.clantype=='complete':
- if len(SameColorAsClan)==len(Clan.nodes):
- print 'El nodo ve a todos los elementos del mismo color que el color del clan'
- Clan.add_node(node)
- #Pack(Clan.nodes)#la regla del compactar no se cumple aqui, pero lo voy a dejar
- elif len(SameColorAsClan)!= 0:
- ListNodesSameColor = []
- ListNodesDiferentColor = []
- for i in SameColorAsClan:
- ListNodesSameColor.append(i.EdgeFrom())
- print 'El nodo ve a algunos elementos del clan del mismo color que el color del clan'
- print 'los elementos son:'
- print ListNodesSameColor
- NodesInClan = Clan.nodes[:]
- for i in NodesInClan:
- if str(i) not in ListNodesSameColor:
- ListNodesDiferentColor.append(i)
- print 'Elementos del clan que no son vistos del mismo color:', ListNodesDiferentColor
- ClanNotSameColor = MyClan('complete')
- for i in ListNodesDiferentColor:
- Clan.remove_node(i)
- if '[' in i: #Se trata de un clan
- ci = i.replace('[','')
- ci = ci.replace(']','')
- ci = ci.split(', ')
- print ci
- clan_i = Clan.getclanwithnodes(ci)
- ClanNotSameColor.add_clan(ci)
- else:
- ClanNotSameColor.add_node(i)
- #for i in Clan.nodes:
- # if type(i) == list:
- # l = str(i)
- # else:
- # l = i
- # if l in ListNodesDiferentColor:
- # Clan.remove_node(i)
- #print '\\\\\\\\\\'
- #print Clan.nodes
- print '*********************'
- AddNode(ClanNotSameColor,node)
- print ClanNotSameColor.nodes
- print '++++++'
- print Clan.nodes
- Clan.add_clan(ClanNotSameColor)
- print 'clan final', Clan.nodes
- Pack(ClanNotSameColor.nodes)
- #Pack(Clan.nodes)#la regla del compactar no se cumple aqui, pero lo voy a dejar
- print '************************************* compacta a: ', ClanNotSameColor.nodes
- elif len(NonVisibleClans)!=0:
- print 'El nodo no puede ver a ',len(NonVisibleClans) ,' elementos del clan y estos son:', NonVisibleClans
- Clan.add_node(node)
- Clan.remove_nodes_from(NonVisibleClans)
- Clan.clantype = 'primitive'
- print 'Nodos del Clan antes del Split: ', Clan.nodes
- #for i in NonVisibleClans:
- # print 'nodo en NonVisibleClans: ', i
- # Clan.add_nodes_from(Split(i,node))
- S=Split(NonVisibleClans,node)
- #Clan.add_nodes_from(S)
- print 'Nuevos nodos', S[1]
- Clan.add_nodes_from(S[1])
- print 'Nuevos clanes', S[2]
- #Clan.add_nodes_from(S[2])
- for i in S[2]:
- CG = ClanGenerator(i)
- Clan.add_clan(CG)
- #print 'Elementos de Split:', S
- #AddSplitedNodes(S[0],Clan)
- #Clan.add_nodes_from(S[1])
- print 'Nodos del Clan despues del Split: ', Clan.nodes,'***'
- else:
- if EdgesHaveSameColor(VisibleClans):
- print 'El nodo ve con el mismo color a todos los elementos del clan, y este color es distintos al color del clan.'
- NodesInVisibleClans =Clan.nodes[:]
- Clan.add_node(node)
- Clan.remove_nodes_from(NodesInVisibleClans)
- NewClan = MyClan('complete')
- NewClan.add_nodes_from(NodesInVisibleClans)
- Clan.add_clan(NewClan)
- Pack(NodesInVisibleClans)
- #Pack(Clan.nodes)#la regla del compactar no se cumple aqui, pero lo voy a dejar
- print 'Los nodos del clan resultante son: ', Clan.nodes, '\n **********************************mismos que se compactaron'
- else:#Si ve a k nodos del mismo color estos se deben agrupar y no se estan agrupando... revisar esto con un ejemplo
- print 'los ve de distinto color'
- #l = Split(Clan.nodes(),node)
- Nodes = Clan.nodes[:]
- Clan.remove_nodes_from(Nodes)
- Clan.add_node(node)
- Clan.clantype = 'primitive'
- #NewClansList =[]
- #for i in l:
- # if len(i)>1:#if '[' in i:
- # print 'formar un nuevo clan con i ',i,' y pack them'
- # NewClan = MyClan()
- # NewCla.add_nodes_from(i)
- # else:
- # Clan.add_node(i)
- S=Split(Nodes,node)
- #Clan.add_nodes_from(S)
- print 'Nuevos nodos', S[1]
- Clan.add_nodes_from(S[1])
- print 'Nuevos clanes', S[2]
- #Clan.add_nodes_from(S[2])
- for i in S[2]:
- CG = ClanGenerator(i)
- Clan.add_clan(CG)
- #print 'Elementos de Split: ',S
- #AddSplitedNodes(S[0],Clan)
- #Clan.add_nodes_from(S[1])
- print 'Nodos en el Clan despues de Split', Clan.nodes
- #No se hace pack ya que se compactara hasta que llegue un fondo que los vea a todos igual
- else:#primitive
- if len(NonVisibleClans) != 0:
- print 'Hay elementos no visibles y son:'
- for n in NonVisibleClans:
- print n
- print 'si el tamani del non visible es uno, ver si hace clan con este, sino colocarlo como uno mas y hacer split'
- if len(NonVisibleClans) == 1 and ClanWithNonVisible(NonVisibleClans[0],Clan.nodes,node):
- print 'hay un nodo/clan no visible y hace clan con el, es:', NonVisibleClans[0]
- print 'buscarlo en: ', Clan.nodes
- ClanAux = Clan.getclanwithnodes(NonVisibleClans[0])
- AddNode(ClanAux,node)#Aqui se hace pack segun donde deba compactarse
- Clan.remove_node(NonVisibleClans[0])
- Clan.add_clan(ClanAux)
- else:
- print 'Hay un nodo/clan (pero no forma clan con el) o mas nodos/clanes no visibles desde node'
- Clan.add_node(node)
- Clan.remove_nodes_from(NonVisibleClans)
- S = Split(NonVisibleClans,node)
- #Clan.add_nodes_from(S)
- print 'Nuevos nodos', S[1]
- Clan.add_nodes_from(S[1])
- print 'Nuevos clanes', S[2]
- #Clan.add_nodes_from(S[2])
- for i in S[2]:
- CG = ClanGenerator(i)
- Clan.add_clan(CG)
- #print 'Elementos de Split: ',S
- #AddSplitedNodes(S[0],Clan)
- #Clan.add_nodes_from(S[1])
- print 'Nodos en el Clan despues de Split', Clan.nodes
- elif EdgesHaveSameColor(VisibleClans):
- print 'El nodo ve a todos los elementos del clan primitive del mismo color.'
- NodesInVisibleClans =Clan.nodes[:]
- Clan.remove_nodes_from(NodesInVisibleClans)
- Clan.add_node(node)
- Clan.clantype = 'complete'
- NewClan= MyClan('primitive')
- NewClan.add_nodes_from(NodesInVisibleClans)
- Clan.add_clan(NewClan)
- Pack(NodesInVisibleClans)#Se compactan porque ya el node los esta compactando.
- else:
- print 'Buscar si hace clan con alguno y sino colocarlo como un nodo mas'
- #ClanWith(VisibleClans,node)
- CW =ClanWith(Clan.nodes,node)
- if CW[0]:
- print 'hizo clan con un node/clan'
- if '[' in CW[1]:
- print 'hizo clan con un clan'
- AuxClan = Clan.getclanwithnodes(CW[1])
- Clan.remove_clan(AuxClan)
- else:
- print 'hizo clan con un nodo'
- AuxClan=MyClan('complete')
- AuxClan.add_node(CW[1])
- Clan.remove_node(CW[1])
- AddNode(AuxClan,node)
- Pack(AuxClan.nodes)
- Clan.add_clan(AuxClan)
- else:
- print 'no hizo clan, solo se agrega el nodo y el clan se mantiene primitive'
- Clan.add_node(node)
- #Pack(Clan.nodes)
- class MyClan:
- def __init__ (self,typeof):
- self.clantype = typeof
- self.nodes=[]
- self.clanlist = []
- def nodes(self):
- return self.nodes
- def remove_node(self,node):
- self.nodes.remove(node)
- def add_node(self,node):
- self.nodes.append(node)
- def add_nodes_from(self,nodelist):
- for n in nodelist:
- self.nodes.append(n)
- def remove_nodes_from(self,nodelist):
- for n in nodelist:
- self.nodes.remove(n)
- def add_clan(self, clan):
- self.add_node(clan.nodes)
- self.clanlist.append(clan)
- def remove_clan(self,clan):
- self.remove_node(clan.nodes)
- self.clanlist.remove(clan)
- def getclanwithnodes(self,nodes):
- for k in self.clanlist:
- print 'lista de nodes en clanes:', k.nodes, type(k.nodes)
- print 'los nodos que se buscan:',nodes, type(nodes)
- found = False
- c = 0
- while not found and c < len(self.clanlist):
- #if nodes == self.clanlist[c].nodes:
- if nodes == str(self.clanlist[c].nodes):
- found = True
- else:
- c+=1
- if found:
- return self.clanlist[c]
- else:
- print 'no se encontro el clan'
- class Edge:
- def __init__ (self, labelFrom,sep,labelTo):
- self.label = labelFrom+sep+labelTo
- self.labelFrom = labelFrom
- self.labelTo = labelTo
- def __str__(self):
- return self.label
- def EdgeFrom(self):
- return self.labelFrom
- def EdgeTo(self):
- return self.labelTo
- """
- MakeSet(x) initializes the decomposition
- Find(x) returns representative object of the set containing x
- Union(x,y) makes two sets containing x and y respectively into one set
- """
- def MakeSet(x):
- x.parent = x
- x.rank = 0
- def Union(x, y):
- xRoot = Find(x)
- yRoot = Find(y)
- if xRoot.rank > yRoot.rank:
- yRoot.parent = xRoot
- elif xRoot.rank < yRoot.rank:
- xRoot.parent = yRoot
- elif xRoot != yRoot: # Unless x and y are already in same set, merge them
- yRoot.parent = xRoot
- xRoot.rank = xRoot.rank + 1
- def Find(x):
- if x.parent == x:
- return x
- else:
- x.parent = Find(x.parent)
- return x.parent
- ''''''''''''''''''
- def ElementInX(x,ElementsList): #regresa los elementos de ElementsList que tienen raiz x
- xRoot=Find(x)
- l=[]
- for i in range(xRoot.rank+1):
- l.append([])
- for element in ElementsList:
- if str(Find(element))== str(x):
- l[element.rank].append(str(element))
- return l
- def ConstructColorTrees(ColorMatrix,EdgesNodes):
- ListColors = []
- ListParents= []
- for i in range(len(ColorMatrix)):
- for j in range(len(ColorMatrix[i])):
- FromTo=str(i)+','+str(j)
- n = Edge(str(i),',',str(j))
- #n = Edge(FromTo)
- EdgesNodes.append(n)
- MakeSet(n)
- if ColorMatrix[i][j] in ListColors:
- Index= ListColors.index(ColorMatrix[i][j])
- Union(ListParents[Index],n)
- else:
- ListParents.append(n)
- ListColors.append(ColorMatrix[i][j])
- for i in ListParents:
- print ElementInX(i,EdgesNodes)
- return ListParents,ListColors
- #Usa Pack 1
- #MyGraph_1=[['None','black','blue','black','black','black','black'],['black','None','red','black','black','black','black'],['blue','red','None','black','black','black','black'],['black','black','black','None','blue','blue','blue'],['black','black','black','blue','None','black','red'],['black','black','black','blue','black','None','blue'],['black','black','black','blue','red','blue','None']]
- #Usa Split/Pack/ClanWith uno no visible
- #MyGraph_1=[['None','black','black','red','black','red','red'],['black','None','blue','red','black','red','black'],['black','blue','None','red','black','red','red'],['red','red','red','None','black','red','blue'],['black','black','black','black','None','blue','black'],['red','red','red','red','blue','None','red'],['red','black','red','blue','black','red','None']]
- #Pack/ClanWith un nodo visible(el ultimo) 3
- #MyGraph_1=[['None','red','blue','blue'],['red','None','black','black'],['blue','black','None','black'],['blue','black','black','None']]
- #Pack/ClanWith un clan visible(el ultimo) 4
- #MyGraph_1=[['None','red','blue','blue','blue','blue'],['red','None','black','black','black','black'],['blue','black','None','red','red','black'],['blue','black','red','None','red','black'],['blue','black','red','red','None','black'],['blue','black','black','black','black','None']]
- #Pack/ClanWith un clan visible(el ultimo) 5
- #MyGraph_1=[['None','red','blue','blue','blue','blue'],['red','None','black','black','black','black'],['blue','black','None','red','red','red'],['blue','black','red','None','red','red'],['blue','black','red','red','None','red'],['blue','black','red','red','red','None']]
- #primitive y el ultimo nodo no ve a varios nodos 6
- #MyGraph_1=[['None','red','blue','black','red','blue','black'],['red','None','black','red','blue','black','red'],['blue','black','None','blue','black','red','blue'],['black','red','blue','None','red','blue','black'],['red','blue','black','red','None','black','blue'],['blue','black','red','blue','black','None','red'],['black','red','blue','black','blue','red','None']]
- #2 clanes no visibles 7
- #MyGraph_1=[['None','red','red','red','black','red','red','red','black'],['red','None','red','red','red','red','red','red','black'],['red','red','None','black','red','red','red','black','red'],['red','red','black','None','red','red','red','black','black'],['black','red','red','red','None','red','red','red','red'],['red','red','red','red','red','None','black','red','red'],['red','red','red','red','red','black','None','red','red'],['red','red','black','black','red','red','red','None','black'],['black','black','red','black','red','red','red','black','None']]
- EdgesNodes =[]
- CCT=ConstructColorTrees(MyGraph_1,EdgesNodes)
- '''
- EdgesNodes tiene objetos Edge, sobre los cuales operan directamente MakeSet, y asi Find y Union
- '''
- ActualClan = MyClan('complete')
- ActualClan.add_node(str(0))
- for i in range(1,len(MyGraph_1)):
- AddNode(ActualClan,str(i))
- #ActualClan.add_node(str(i))
- print ActualClan.nodes
Add Comment
Please, Sign In to add comment