2016-11-30 192 views
1

我是新来的stackoverflow。我搜索了适合我的问题的主题,但不幸的是我没有找到一个。所以我开了一个新话题。创建矩阵

我必须在python中实现一个函数,该函数创建出某个输入的关联矩阵。我的问题是,我不太明白如何访问indeces,所以每列只有一个'1'而不是两个..:/

希望你们可以帮助我.. kinda丢失我的介意这一个

class incidence_matrix: 
    def __init__(self, vertices, edges): 
     self.vertices = vertices 
     self.edges = edges 
     self.liste = [[0 for i in range(vertices)] for i in range(vertices)] 
     #print(self.liste) 
     for i in range(0, vertices): 
      for j in range(0, len(edges)): 
       if edges[i][j-1] >= vertices or edges[i][j-1] < 0 or edges[i][j-1] >= vertices or edges[i][j-1] < 0: 
        print("Index out of range") 
        return 
       self.liste[edges[0][j+1]][edges[1][j+1]] = 1 
       self.liste[edges[1][j+1]][edges[0][j+1]] = 1 

     for x in range(0, vertices): 
      row = "" 
      for y in range(0, len(edges)): 
       row = row + str(self.liste[x][y]) + " " 
      print(row) 
+0

你能告诉边缘字典样子 – Navidad20

+0

图表= incidence_matrix(4,[(1,2),(0, 1),(0,2)]) –

回答

0

这应该适合你。它假定边是双向的。

class incidence_matrix: 
    def __init__(self, vertices, edges): 
     self.vertices = vertices 
     self.edges = edges 
     self.liste = [[0 for i in range(vertices)] for i in range(len(edges))] 
     for i in range(len(edges)): 
      v1, v2 = edges[i] 
      if v1 >= vertices: 
       continue 
      if v2 >= vertices: 
       continue 
      self.liste[i][v1] = 1 
      self.liste[i][v2] = 1 

     for i in range(len(edges)): 
      row = ' '.join([str(x) for x in self.liste[i]]) 
      print(row) 

输入:

graph = incidence_matrix(4, [(1,2),(0,1),(0,2)]) 

输出:

0 1 1 0 
1 1 0 0 
1 0 1 0 
+0

mh ...这不是正确的输出。我不知道如何格式化聊天输入以显示矩阵,但程序的输出必须是 [[0,1,1] [1,1,0] [1,0,1] [ 0,0,0]]但它是[[0,1,1,0] [0,0,1,0] [0,0,0,0] [0,0,0,0]] –

+0

I如果你把4个顶点放在一起,你会不会想要每对之间的匹配? – Navidad20

+0

是的,我只是作为Matrix的发病率而已。你给我的输出是一个邻接矩阵 - 或者我现在错了..? –