„Python“ programa, skirta pirmiausia paieškai „Breadth First“ arba BFS diagramai
„Breadth First Traversal“ (arba paieška) nes grafikas yra panašus į „Breadth First Traversal of the tree“ (žr. 2 metodą šis įrašas ).
Vienintelis dalykas čia yra tas, kad skirtingai nei medžiai, grafikuose gali būti ciklai, todėl galime vėl patekti į tą patį mazgą. Kad mazgas nebūtų apdorotas daugiau nei vieną kartą, naudojame loginį aplankytą masyvą. Paprastumo dėlei daroma prielaida, kad visos viršūnės pasiekiamos iš pradinės viršūnės. Pavyzdžiui, sekančiame grafe pradedame ėjimą nuo 2 viršūnės. Kai pasiekiame viršūnę 0, ieškome visų gretimų jos viršūnių. 2 taip pat yra gretima viršūnė, lygi 0. Jei nepažymėsime aplankytų viršūnių, tada 2 bus apdorojamas dar kartą ir tai taps nesibaigiančiu procesu. Šios grafikos skersmuo pirmas plotis yra 2, 0, 3, 1.
Toliau pateikiami paprasto Breadth First Traversal diegimai iš tam tikro šaltinio.
Diegimas naudoja gretimų sąrašo atstovavimas grafikų. STL 's sąrašo konteineris naudojamas gretimų mazgų sąrašams ir mazgų, reikalingų BFS perėjimui, sąrašams saugoti.
Python # Python3 Program to print BFS traversal # from a given source vertex. BFS(int s) # traverses vertices reachable from s. from collections import defaultdict # This class represents a directed graph # using adjacency list representation class Graph: # Constructor def __init__(self): # Default dictionary to store graph self.graph = defaultdict(list) # Function to add an edge to graph def addEdge(self, u, v): self.graph[u].append(v) # Function to print a BFS of graph def BFS(self, s): # Mark all the vertices as not visited visited = [False] * (max(self.graph) + 1) # Create a queue for BFS queue = [] # Mark the source node as # visited and enqueue it queue.append(s) visited[s] = True while queue: # Dequeue a vertex from # queue and print it s = queue.pop(0) print(s, end=' ') # Get all adjacent vertices of the # dequeued vertex s. # If an adjacent has not been visited, # then mark it visited and enqueue it for i in self.graph[s]: if not visited[i]: queue.append(i) visited[i] = True # Driver code if __name__ == '__main__': # Create a graph given in # the above diagram g = Graph() g.addEdge(0, 1) g.addEdge(0, 2) g.addEdge(1, 2) g.addEdge(2, 0) g.addEdge(2, 3) g.addEdge(3, 3) print('Following is Breadth First Traversal' ' (starting from vertex 2)') g.BFS(2) # This code is contributed by Neelam Yadav # This code is modified by Susobhan Akhuli Išvestis
Following is Breadth First Traversal (starting from vertex 2) 2 0 3 1
Laiko sudėtingumas: O(V+E), kur V – grafo viršūnių skaičius, o E – briaunų skaičius
Pagalbinė erdvė: O(V)
Peržiūrėkite visą straipsnį apie „Breadth First Search“ arba BFS diagramai daugiau detalių!