Last active
December 23, 2015 10:09
-
-
Save sosoyososo/6619980 to your computer and use it in GitHub Desktop.
python:对graph新的copy方法
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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