mqxym

matrizen.py

Feb 19th, 2024
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.18 KB | Source Code | 0 0
  1. import copy
  2. #Matrix!
  3. mat_original = [
  4.     [0,1,0,0,1,0],
  5.     [1,0,0,0,0,0],
  6.     [0,0,0,1,1,0],
  7.     [0,0,1,0,1,1],
  8.     [1,0,1,1,0,0],
  9.     [0,0,0,1,0,0],
  10. ]
  11.  
  12. def printmat(mat):
  13.     print('---------')
  14.     for i in range(0,len(mat)):
  15.         print(mat[i])  
  16.  
  17. print('Die Matrix ist:')
  18. printmat(mat_original)
  19.  
  20. #Anzahl der Knoten (=Anzahl der Zeilen)
  21. nodes = len(mat_original)
  22. print('Die Anzahl der Knoten ist', str(nodes) + '.')
  23.  
  24. #Anzahl Kanten
  25. edges = 0
  26. for i in range(0,len(mat_original)):
  27.     edges += mat_original[i].count(1) # Zählt die Anzahl der einsen in Spalte i
  28. edges = int(edges/2)
  29. print ('Die Anzahl der Kanten ist', str(edges) + '.')
  30.  
  31. #Breitensuche
  32. def breadth_first_search (mat, start):
  33.     consistent = True
  34.    
  35.     #Besuchte Werte initialisieren
  36.     visited = []
  37.     for i in range(0, len(mat)):
  38.         visited.append(False)
  39.    
  40.     visited[start] = True
  41.    
  42.     #Warteschlange initialisieren
  43.     queue = []
  44.     queue.append(start)
  45.    
  46.     while (len(queue) != 0):
  47.        
  48.         current = queue.pop(0) # Holt das erste Element aus der Warteschlange raus und löscht diese
  49.        
  50.         #Knoten, die in Matrix mit start verbunden sind herrausfinden
  51.         for i in range(0, len(mat[current])): #Jedes Element durchgehen
  52.             if (mat[current][i] == 1 and visited[i] == False):
  53.                     queue.append(i) #Gefundenen Knoten hinzufügen
  54.                     visited[i] = True #Gefundenen Knoten als besucht markieren
  55.                
  56.     #Prüfen, ob Netz zusammenhängend ist
  57.     for i in range(0, len(visited)):
  58.         if (visited[i] == False):
  59.             consistent = False
  60.    
  61.     return consistent
  62.  
  63. def del_edge(mat, x, y):
  64.     mat_copy = copy.deepcopy(mat)
  65.     mat_copy[x][y] = 0
  66.     mat_copy[y][x] = 0
  67.     return mat_copy
  68.  
  69. #Test auf kritische Leitungen
  70. def critical_connection (mat):
  71.     print('Test auf kritische Leitungen:')
  72.     for r in range(0, len(mat)): #Geht durch die Zeilen
  73.         for c in range(0,len(mat[r])): #Geht durch Spalten
  74.             if (mat[c][r] == 1): #Wenn Kante gefunden
  75.                 del_mat = del_edge(mat, c, r)
  76.                 if (breadth_first_search(del_mat, 0) == False):
  77.                     print("Kritische Leitung bei", c , "->" , r)
  78.                
  79.    
  80. result = breadth_first_search(mat_original, 5)
  81. if result:
  82.     print('Die Matrix ist zusammenhängend.')
  83.     critical_connection(mat_original)
  84. else:
  85.     print('Die Matrix ist nicht zusammenhängend.')
Add Comment
Please, Sign In to add comment