Skip to content

Instantly share code, notes, and snippets.

@sosoyososo
Created September 18, 2013 16:43
Show Gist options
  • Save sosoyososo/6611926 to your computer and use it in GitHub Desktop.
Save sosoyososo/6611926 to your computer and use it in GitHub Desktop.
python:生成一个graph中的节点,并建立各个节点之间的关系,实现对graph的遍历,对graph的copy#def Graph struct
class Node():
index = 0
neighbors = []
def __init__(self, arg):
self.index = arg
def description(self):
out = []
out.append (self.index)
for item in self.neighbors:
out.append(item.index)
print (out)
def allNode (self, checkArray, out) :
tempNodesArray = self.neighbors[:]
tempNodesArray.append(self)
for node in tempNodesArray:
if node in checkArray:
pass
else:
checkArray.append(node)
if node in out:
pass
else:
out.append(node)
node.allNode(checkArray, out)
def makeGraphNodesCopy(self):
nodes = []
self.allNode([],nodes)
newNodes = []
for node in nodes:
newNode = Node(node.index)
newNodes.append(newNode)
return newNodes, nodes
def createRelation(self, graphNodes, newNodes):
if len(graphNodes) == len(newNodes) :
for node in graphNodes:
newIndex = graphNodes.index(node)
newNode = newNodes[newIndex]
newNode.neighbors = []
for subItem in node.neighbors:
index = graphNodes.index(subItem)
newSubItem = newNodes[index]
newNode.neighbors.append(newSubItem)
# node.description()
else:
print ("error!!!!!")
def copyGraph(self):
newNodes,allNode = self.makeGraphNodesCopy()
self.createRelation(allNode, newNodes)
return newNodes
#create nodes in graph
nodes = []
for i in range (0, 7) :
node = Node(i)
nodes.append(node)
#create relation ships among all nodes
for node in nodes:
tempNodesArray = nodes[:]
tempNodesArray.remove(node)
node.neighbors = tempNodesArray
print("old graph")
for node in nodes:
node.description()
newNodes = nodes[0].copyGraph()
print ("new graph")
for node in newNodes:
node.description()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment