2016-11-30 4 views
1

Ich bin neu in stackoverflow. Ich habe nach einem Thema gesucht, das zu meinem Problem passt, aber leider habe ich keins gefunden. Also eröffne ich ein neues Thema.Erstellen von Inzidenz Matrix

Ich muss eine Funktion in Python implementieren, die eine Inzidenzmatrix aus einer bestimmten Eingabe erstellt. Mein Problem ist, dass ich nicht ganz verstanden habe, wie man auf die Indices zugreift und so hat jede Spalte nur eine '1' drin statt zwei ..:

Hoffe, ihr könnt mir helfen, mein Kind zu verlieren Denken Sie daran

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

konnte man zeigen, was die Kanten Wörterbuch sieht aus wie – Navidad20

+0

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

Antwort

0

Dies sollte für Sie arbeiten. Es wird angenommen, dass Kanten bidirektional sind.

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) 

Eingang:

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

Ausgang:

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

mh ... das ist nicht die richtige Ausgabe. Ich weiß nicht, wie man die Eingabe im Chat formatiert, um die Matrix zu zeigen, aber die Ausgabe des Programms muss [[0,1,1] [1,1,0] [1,0,1] [] sein 0,0,0]] aber es ist [[0,1,1,0] [0,0,1,0] [0,0,0,0] [0,0,0,0]] –

+0

I bin dann verwirrt darüber, wie Sie die Kanten arbeiten wollen, und wenn Sie 4 Ecken setzen, möchten Sie nicht Übereinstimmungen zwischen jedem Paar? – Navidad20

+0

ja, tue ich aber als inzidenzmatrix. Die Ausgabe, die du mir gegeben hast, ist eine Adjazenzmatrix - oder irre ich mich gerade ..? –