Untitled

 avatar
unknown
plain_text
a year ago
1.6 kB
3
Indexable
class queue:

    class current_vertex:
        data = None
        pointer = None

    front_pointer = None
    back_pointer = None

    def enqueue(self,item):
        #Check queue overflow
        try:
            #Push the item
            new_current_vertex = queue.current_vertex()
            new_current_vertex.data = item
            #Empty queue
            if self.back_pointer == None:
                self.front_pointer = new_current_vertex
            else:
                self.back_pointer.pointer = new_current_vertex
            self.back_pointer = new_current_vertex
            return True
        except:
            return False

    def dequeue(self):
        #Check queue underflow
        if self.front_pointer != None:
            #Dequeue the item
            popped = self.front_pointer.data
            self.front_pointer = self.front_pointer.pointer
            #When the last item is dequeued reset the pointers
            if self.front_pointer == None:
                self.back_pointer = None
            return popped
        else:
            return None
    
#Main program starts here
graph = {"A":["B","C","D"],"B":["A","E"],"C":["A","D"],"D":["A","C","F"],"E":["B","G"],"F":["D"],"G":["E"]}
visited = []
q = queue()
current_vertex = "A"
while current_vertex != None:
    if not current_vertex in visited:
        visited.append(current_vertex)
    for vertex in graph[current_vertex]:
        if not vertex in visited:
            q.enqueue(vertex)
    current_vertex = q.dequeue()
print(visited)
Editor is loading...
Leave a Comment