Advertisement
Hafixie93

Algorithm kosaraju python

Dec 10th, 2020
662
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 3.21 KB | None | 0 0
  1. # Python pelaksanaan algoritma Kosaraju untuk mencetak semua SCC
  2.  
  3. dari koleksi import defaultdict
  4.    
  5. #Kelas ini mewakili grafik yang diarahkan menggunakan perwakilan senarai adjacency
  6. Graf kelas:
  7.    
  8.     def __init __ (diri, bucu):
  9.         diri.V = bucu #No. bucu
  10.         self.graph = defaultdict (senarai) # kamus lalai untuk menyimpan grafik
  11.    
  12.     # berfungsi untuk menambahkan kelebihan pada graf
  13.     def addEdge (diri, u, v):
  14.         self.graph [u] .lampirkan (v)
  15.    
  16.     # Fungsi yang digunakan oleh DFS
  17.     def DFSUtil (diri, v, dikunjungi):
  18.         # Tandakan nod semasa sebagai dikunjungi dan cetaknya
  19.         dikunjungi [v] = Benar
  20.         cetak (v)
  21.         #Recur untuk semua bucu yang berdekatan dengan bucu ini
  22.         untuk i dalam self.graph [v]:
  23.             jika dikunjungi [i] == Salah:
  24.                 diri.DFSUtil (i, dikunjungi)
  25.  
  26.  
  27.     def fillOrder (diri, v, dilawati, tumpukan):
  28.         # Tandakan nod semasa sebagai dilawati  
  29.         dikunjungi [v] = Benar
  30.         #Recur untuk semua bucu yang berdekatan dengan bucu ini
  31.         untuk i dalam self.graph [v]:
  32.             jika dikunjungi [i] == Salah:
  33.                 self.fillOrder (i, dikunjungi, tumpukan)
  34.         timbunan = tumpukan.lampirkan (v)
  35.      
  36.  
  37.     # Fungsi yang mengembalikan terbalik (atau menukar) grafik ini
  38.     def getTranspose (diri):
  39.         g = Grafik (diri.V)
  40.  
  41.         # Berulang untuk semua bucu yang berdekatan dengan bucu ini
  42.         untuk i dalam diri.gr:
  43.             untuk j dalam self.graph [i]:
  44.                 g.addEdge (j, i)
  45.         pulangan g
  46.  
  47.     # Fungsi utama yang mencari dan mencetak semuanya dengan kuat
  48.     # komponen bersambung
  49.     def printSCC (diri):
  50.         timbunan = []
  51.         # Tandakan semua bucu sebagai tidak dikunjungi (Untuk DFS pertama)
  52.         dilawati = [Salah] * (diri.V)
  53.         # Isi bucu dalam timbunan mengikut penamatnya
  54.         # kali
  55.         untuk i in range (self.V):
  56.             jika dikunjungi [i] == Salah:
  57.                 self.fillOrder (i, dikunjungi, tumpukan)
  58.         cetak (timbunan)
  59.         # Buat graf terbalik
  60.         gr = self.getTranspose ()
  61.            
  62.         # Tandakan semua bucu sebagai tidak dikunjungi (Untuk DFS kedua)
  63.         dilawati = [Salah] * (diri.V)
  64.  
  65.         # Sekarang proseskan semua bucu mengikut urutan yang ditentukan oleh Stack
  66.         semasa tumpukan:
  67.             i = tumpukan.pop ()
  68.             jika dikunjungi [i] == Salah:
  69.                gr.DFSUtil (i, dikunjungi)
  70.                cetak ("")
  71.    
  72. # Buat graf yang diberikan dalam rajah di atas
  73. g = Grafik (16)
  74. g.addEdge (1, 0)
  75. g.addEdge (1, 2)
  76. g.addEdge (2, 1)
  77. g.addEdge (2, 3)
  78. g.addEdge (0, 4)
  79. g.addEdge (4, 0)
  80. g.addEdge (4, 5)
  81. g.addEdge (6, 5)
  82. g.addEdge (6, 7)
  83. g.addEdge (7, 6)
  84. g.addEdge (0, 7)
  85. g.addEdge (7, 0)
  86. g.addEdge (5, 9)
  87. g.addEdge (9, 5)
  88. g.addEdge (6, 9)
  89. g.addEdge (11, 6)
  90. g.addEdge (11, 7)
  91. g.addEdge (11, 10)
  92. g.addEdge (10, 11)
  93. g.addEdge (8, 12)
  94. g.addEdge (9, 13)
  95. g.addEdge (14, 13)
  96. g.addEdge (5, 12)
  97. g.addEdge (9, 14)
  98. g.addEdge (9, 15)
  99.    
  100. cetak ("Berikut adalah komponen yang sangat berkaitan" +
  101.                            "dalam graf yang diberikan")
  102. g. cetakSCC ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement