问题描述
下面,在邻接矩阵方法中,我创建了2个产生相同结果的数组,但是当更改数组中的值时,我得到2个不同的结果。我最初尝试标记为“ array_matrixx”的那个,但是更改嵌套列表中的值不仅会更改列表之一,而且实际上会更改所有嵌套列表。另一方面,标记为“ array_matrix”的数组使用另一种方法用零填充数组,并产生更改正确嵌套列表中的索引的正确结果。如果在for循环之前它们是相同的,为什么会发生这种情况?
我已经列出了运行两个列表进行比较所需的所有代码。只需将其中一个注释掉即可。
class Node(object):
def __init__(self,value):
self.value = value
self.edges = []
class Edge(object):
def __init__(self,value,node_from,node_to):
self.value = value
self.node_from = node_from
self.node_to = node_to
class Graph(object):
def __init__(self,nodes=[],edges=[]):
self.nodes = nodes
self.edges = edges
def insert_node(self,new_node_val):
new_node = Node(new_node_val)
self.nodes.append(new_node)
def insert_edge(self,new_edge_val,node_from_val,node_to_val):
from_found = None
to_found = None
for node in self.nodes:
if node_from_val == node.value:
from_found = node
if node_to_val == node.value:
to_found = node
if from_found == None:
from_found = Node(node_from_val)
self.nodes.append(from_found)
if to_found == None:
to_found = Node(node_to_val)
self.nodes.append(to_found)
new_edge = Edge(new_edge_val,from_found,to_found)
from_found.edges.append(new_edge)
to_found.edges.append(new_edge)
self.edges.append(new_edge)
def get_adjacency_matrix(self):
max_index = self.find_max_index()
adjacency_matrixx = [([0] * (max_index + 1))] * (max_index + 1)
print(adjacency_matrixx)
adjacency_matrix = [[0 for i in range(max_index + 1)] for j in range(max_index + 1)]
print(adjacency_matrix)
for edge_object in self.edges:
adjacency_matrix[edge_object.node_from.value][edge_object.node_to.value] = edge_object.value
return adjacency_matrix
def find_max_index(self):
max_index = -1
if len(self.nodes):
for node in self.nodes:
if node.value > max_index:
max_index = node.value
return max_index
graph = Graph()
graph.insert_edge(100,1,2)
graph.insert_edge(101,3)
graph.insert_edge(102,4)
graph.insert_edge(103,3,4)
# Should be [[0,0],[0,100,101,102],103],0]]
print(graph.get_adjacency_matrix())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)