Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.65 KB | None | 0 0
  1. class Queue:
  2.     def __init__(self, n):
  3.         self.S = [None] * n
  4.         self.n = n
  5.         self.elements = 0
  6.         self.head = 0
  7.  
  8.     def enqueue(self, x):
  9.         self.S[(self.head + self.elements) % self.n] = x
  10.         self.elements += 1
  11.  
  12.     def dequeue(self):
  13.         a = self.S[self.head]
  14.         self.head = (self.head + 1) % self.n
  15.         self.elements -= 1
  16.         return a
  17.  
  18.     def is_empty(self):
  19.         return self.elements == 0
  20.  
  21.  
  22. class pkt:
  23.     def __init__(self, nr):
  24.         self.nr = nr
  25.         self.visited = False
  26.         self.d = -1
  27.         self.parent = None
  28.  
  29.  
  30. class graf:
  31.     def __init__(self):
  32.         self.arr = []
  33.  
  34.  
  35. def BFS(G, s):
  36.     Q = Queue(len(G))
  37.     Graf = graf()
  38.     F = [[] for _ in range(len(G))]
  39.     for i in range (len(G)):
  40.         F[i] = [None] * (2)
  41.     for i in range(len(G)):
  42.         x = pkt(i)
  43.         Graf.arr.append(x)
  44.     Graf.arr[s].d = 0
  45.     Graf.arr[s].visited = True
  46.     Q.enqueue(Graf.arr[s])
  47.     while not Q.is_empty():
  48.         u = Q.dequeue()
  49.         for i in range(len(G)):
  50.             if G[u.nr][i] == 1: # znaczy że z wierzchołka u idzie krawędz do wierzchołka i
  51.                 if not Graf.arr[i].visited:
  52.                     Graf.arr[i].visited = True
  53.                     Graf.arr[i].d = u.d + 1
  54.                     Graf.arr[i].parent = u.nr
  55.                     Q.enqueue(Graf.arr[i])
  56.     for i in range (len(G)):                                           #|
  57.         if Graf.arr[i].visited == False:                               #|
  58.             Q.engueue(Graf.arr[i])                                     #|
  59.             while not Q.is_empty():                                    #|
  60.                 u = Q.dequeue()                                        #|
  61.                 for i in range(len(G)):                                #|
  62.                     if G[u.nr][i] == 1:                                #|Cała ta część jest dla przypadku gdy graf jest niespójny
  63.                         if not Graf.arr[i].visited:                    #|
  64.                             Graf.arr[i].visited = True                 #|
  65.                             Graf.arr[i].d = -1                         #|niepotrzebna linijka ale ustawiam (ponownie) na -1 żeby zaznaczyć że nie da się dojść z wierzchołka s do tego wierzchołka
  66.                             Graf.arr[i].parent = u.nr                  #|
  67.                             Q.enqueue(Graf.arr[i])                     #|
  68.     for i in range(len(G)):
  69.         F[i][0]=Graf.arr[i].parent
  70.         F[i][1]=Graf.arr[i].d
  71.     return F
  72.  
  73.  
  74. G = [[0, 1, 1, 0],
  75.      [0, 0, 0, 1],
  76.      [0, 1, 0, 1],
  77.      [0, 0, 0, 0]]
  78. print(BFS(G,0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement