Skip to content

Instantly share code, notes, and snippets.

@sosoyososo
Last active December 23, 2015 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sosoyososo/6619980 to your computer and use it in GitHub Desktop.
Save sosoyososo/6619980 to your computer and use it in GitHub Desktop.
python:对graph新的copy方法
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 copy(self):
queue = [self]
copyNode = Node(self.index)
nodesMap = {self:copyNode}
while len(queue) > 0:
node = queue.pop()
copyedNode = nodesMap[node]
for subNode in node.neighbors :
if subNode in nodesMap :
copyedNode.neighbors.append(nodesMap[subNode])
else:
copyingNode = Node(subNode.index)
copyedNode.neighbors.append(copyingNode)
#last step will make copyingNode also has neighbors conetents , don't know why
copyingNode.neighbors = []
nodesMap[subNode] = copyingNode
queue.append(subNode)
copyedNode.description()
return copyNode
#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()
print("new graph")
newnode = nodes[0].copy()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment