{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# Lecture 18 - Breadth First Search\n",
        "\n",
        "In today's lecture we will discuss -\n",
        "\n",
        "1.   DFS shortcomings : Shortest paths\n",
        "2.   Breadth based exploration strategy for graphs\n",
        "3.   BFS - design and analysis\n",
        "4.  Queues - First In First Out data structure\n",
        "5.  Queues - applications\n",
        "\n",
        "#Learning Objectives -\n",
        "\n",
        "1. BFS - exploration strategy\n",
        "2. Implementation of BFS\n",
        "3. Analysis of BFS\n",
        "4. Application of Queues to BFS\n",
        "5. Application of BFS to solve graph problems\n",
        "\n",
        "**Announcements**\n",
        "\n",
        "1. Homework 4 out\n",
        "2. Review Session tomorrow 1pm-3pm (recording will be made available)\n",
        "3. Office hours today (5pm-6pm)\n",
        "4. Exam 2 reservations\n",
        "\n",
        "\n"
      ],
      "metadata": {
        "id": "XhPlcYEeJ8jm"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Discovery clicker\n",
        "\n",
        "Scan and use join code 277\n",
        "\n",
        "OR Visit clicker.cs.illinois.edu and use join code 277\n",
        "\n",
        "![Q1.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAIAAAQCCAYAAAA2IFq1AAAAAXNSR0IArs4c6QAAIABJREFUeF7s29GOJr0RbFfp/R9aBnxn2HBjz2lyYlhLtxNdZO4IJqvy+/Xf//3vf//7j/8hgAACCCCAAAIIIIAAAggggMAnCPzXIOATPisSAQQQQAABBBBAAAEEEEAAgf+bgEGAICCAAAIIIIAAAggggAACCCDwIQIGAR8yW6kIIIAAAggggAACCCCAAAIIGATIAAIIIIAAAggggAACCCCAAAIfImAQ8CGzlYoAAggggAACCCCAAAIIIICAQYAMIIAAAggggAACCCCAAAIIIPAhAgYBHzJbqQgggAACCCCAAAIIIIAAAggYBMgAAggggAACCCCAAAIIIIAAAh8iYBDwIbOVigACCCCAAAIIIIAAAggggIBBgAwggAACCCCAAAIIIIAAAggg8CECBgEfMlupCCCAAAIIIIAAAggggAACCBgEyAACCCCAAAIIIIAAAggggAACHyJgEPAhs5WKAAIIIIAAAggggAACCCCAgEGADCCAAAIIIIAAAggggAACCCDwIQIGAR8yW6kIIIAAAggggAACCCCAAAIIGATIAAIIIIAAAggggAACCCCAAAIfImAQ8CGzlYoAAggggAACCCCAAAIIIICAQYAMIIAAAggggAACCCCAAAIIIPAhAgYBHzJbqQgggAACCCCAAAIIIIAAAggYBMgAAggggAACCCCAAAIIIIAAAh8iYBDwIbOVigACCCCAAAIIIIAAAggggIBBgAwggAACCCCAAAIIIIAAAggg8CECBgEfMlupCCCAAAIIIIAAAggggAACCBgEyAACCCCAAAIIIIAAAggggAACHyJgEPAhs5WKAAIIIIAAAggggAACCCCAgEGADCCAAAIIIIAAAggggAACCCDwIQIGAR8yW6kIIIAAAggggAACCCCAAAIIGATIAAIIIIAAAggggAACCCCAAAIfImAQ8CGzlYoAAggggAACCCCAAAIIIICAQYAMIIAAAggggAACCCCAAAIIIPAhAgYBHzJbqQgggAACCCCAAAIIIIAAAggYBMgAAggggAACCCCAAAIIIIAAAh8iYBDwIbOVigACCCCAAAIIIIAAAggggIBBgAwggAACCCCAAAIIIIAAAggg8CECBgEfMlupCCCAAAIIIIAAAggg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QgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSeawbNNSAAAgAElEQVTFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq7nltSebFaxPYqqv52lahmsAmYBCweakmQCAk4It7a0b1B9G2CtVVgep+rOae15ZkXrw2ga26mq9tFaoJbAIGAZuXagIEQgK+uLdmVH8QbatQXRWo7sdq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sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDUE7ARTPkTAtWLdHU/Vr2qYaz2sepVzVe1j1Wvar70cesMr81LNYGTAtX9eHLNnzzbIGDU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)"
      ],
      "metadata": {
        "id": "LktxlwG4nuPs"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Depth First Search - Shortcomings\n",
        "\n",
        "* DFS does not guarantee finding the shortest path between given vertices $s$ and $t$. This is often an important consideration. (Consider finding a flight route from Champaign to Melbourne with the fewest number of hops)\n",
        "\n",
        "* This is primarily because DFS isn't set up to find the shortest path. It is designed instead to explore the graph in a depth first manner.\n",
        "\n",
        "In the graph shown below, DFS starting at vertex 0 will identify path 0-1-2 as the path from 0 to 2 while the shortest path is 0-2.\n",
        "\n",
        "![Screenshot 2026-10-23 at 12.53.16 PM.png](data:image/png;base64,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)"
      ],
      "metadata": {
        "id": "0omFcXREmJbu"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Breadth First Search\n",
        "\n",
        "Breadth first Search explores the graph in a breadth-first manner. The main idea here is to explore all edges of the start vertex before looking at all edges going out of each of its neighbors.\n",
        "\n",
        "BFS starting out from the start vertex expands the frontier one level/layer at a time, if you will.\n",
        "\n",
        "Let us look at the working of BFS on undirected graphs.\n",
        "\n",
        "https://visualgo.net/en/dfsbfs"
      ],
      "metadata": {
        "id": "GghZc9xlrpUq"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#Breadth based exploration strategy for graphs\n",
        "\n",
        "#Main idea - Start from a vertex and visit all of its neighbors first. Then, repeat this process starting from the neighbors.\n",
        "\n",
        "#Requirements -\n",
        "# 1. Need to keep track of visited vertices (in order to avoid repeated processing of vertices)\n",
        "# 2. Need to store all neighbors somewhere so that we can then visit all of their neighbors in the next level\n",
        "# Since we need to process vertices in the order in which they were visited,\n",
        "#  we need a data structure that helps access vertices in the order in which they were visited.\n",
        "\n",
        "# BFS helps find shortest path lengths - and we can use a distance list to maintain the distance of each vertex from the start vertex\n",
        "\n",
        "#BFS uses the Queue data strcuture to support this requirement.\n"
      ],
      "metadata": {
        "id": "F0TpQDyy526R"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "from collections import deque\n",
        "def bfs(G,s):\n",
        "  # number of vertices in G\n",
        "  n = len(G)\n",
        "\n",
        "  # initialize dist to be max possible distance\n",
        "  dist = [float('inf')]*len(G)\n",
        "\n",
        "  # noting down the parent of each vertex\n",
        "  parent = [None]*len(G)\n",
        "\n",
        "  # start the search from s\n",
        "  dist[s] = 0\n",
        "  queue = deque()\n",
        "  queue.append(s)\n",
        "\n",
        "  # start exploring\n",
        "  while len(queue) != 0:\n",
        "    # remove first element in the queue and explore its neighbors\n",
        "    u = queue.popleft()    #pops leftmost element in queue (earliest added element)\n",
        "    for v in G[u]:\n",
        "      if dist[v] == float('inf'):\n",
        "        # v has not been visited\n",
        "        dist[v] = dist[u] + 1\n",
        "        parent[v] = u\n",
        "        queue.append(v)\n",
        "\n",
        "  # return the list distance storing the shortest distance to each vertex\n",
        "  return dist,parent\n",
        "\n",
        "\n",
        "print(bfs([[1,2],[0,2],[0,1,3],[2]],0))\n",
        "print(bfs([[1,2],[0,3,4,5],[0],[1,5,6],[1,6,7],[1,3],[3,4],[4]],0))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "vlxkWnWorp4Z",
        "outputId": "4110c848-03ab-490a-c3e1-d548994ca4b1"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "([0, 1, 1, 2], [None, 0, 0, 2])\n",
            "([0, 1, 1, 2, 2, 2, 3, 3], [None, 0, 0, 1, 1, 1, 3, 4])\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# BFS simulation\n",
        "\n",
        "On the following graph, assuming BFS starts at vertex 0 -\n",
        "\n",
        "![Screenshot 2026-10-23 at 12.53.16 PM.png](data:image/png;base64,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)\n",
        "\n",
        "** Start **\n",
        "\n",
        "* The queue is populated with 0 - queue : [0]\n",
        "* The distance of 0 is set to 0 since it is the start vertex.\n",
        "\n",
        "** Processing vertex 0**\n",
        "\n",
        "* Dequeue operation results in 0 being removed from the queue for processing.\n",
        "queue = []\n",
        "\n",
        "* All of 0's edges will then be processed -\n",
        "\n",
        "* Edge (0,1) - Since 1 is not yet visited, it will be added to the queue. queue : [1]\n",
        "\n",
        "The distance of 1 is set to 1 since the path 0-1 has length 1 and 1's parent is set to 0.\n",
        "\n",
        "* Edge (0,2) - Since 2 is not yet visited, it will be added to the queue.\n",
        "queue : [1,2]\n",
        "\n",
        "The distance of 2 is set to 1 since the path 0-2 has length 1 and 2's parent is set to 0.\n",
        "\n",
        "** Processing vertex 1**\n",
        "\n",
        "* Dequeue operation results in 1 being removed from the queue for processing.\n",
        "queue : [2]\n",
        "\n",
        "* All of 1's edges will then be processed -\n",
        "\n",
        "* Edge (1,0) - Since 0 has already been visited, move on.\n",
        "queue : [2]\n",
        "\n",
        "* Edge (1,2) - Since 2 has already been visited, move on.\n",
        "queue : [2]\n",
        "\n",
        "** Processing vertex 2**\n",
        "\n",
        "* Dequeue operation results in 2 being removed from the queue for processing.\n",
        "queue : []\n",
        "\n",
        "* All of 2's edges will then be processed -\n",
        "\n",
        "* Edge (2,0) - Since 0 has already been visited, move on.\n",
        "queue : []\n",
        "\n",
        "* Edge (2,1) - Since 1 has already been visited, move on.\n",
        "queue : []\n",
        "\n",
        "* Edge (2,3) - Since 3 is not yet visited, it will be added to the queue.\n",
        "queue : [3]\n",
        "\n",
        "The distance of 3 is set to 2 since the path 0-2-3 has length 2 and 3's parent is set to 2.\n",
        "\n",
        "** Processing vertex 3**\n",
        "\n",
        "* Dequeue operation results in 3 being removed from the queue for processing.\n",
        "queue : []\n",
        "\n",
        "* All of 3's edges will then be processed -\n",
        "\n",
        "* Edge (3,2) - Since 2 has already been visited, move on.\n",
        "queue : []\n",
        "\n",
        "** END **\n",
        "\n",
        "The queue is now empty, and all vertices reachable from 0 have been assigned distance and parent values.\n"
      ],
      "metadata": {
        "id": "VKV4fkDoP1uI"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# BFS : Analysis\n",
        "\n",
        "* BFS can be used on both undirected and directed graphs.\n",
        "\n",
        "* BFS takes as input a graph $G$ and a start vertex $s$. It returns a distance list of each vertex from the start vertex and a list of parent of each vertex based on the BFS exploration.\n",
        "\n",
        "**Time and Space complexity**\n",
        "\n",
        "1. Initializing distance list - $O(n)$ time\n",
        "2. Initializing parent list - $O(n)$ time\n",
        "3. Setting s as start vertex - $O(1)$ time\n",
        "4. Processing a vertex and all of its edges - $O(1) + O(deg\n",
        "(u))$ time for vertex $u$ - so overall $O(n) + O(m)$ time\n",
        "\n",
        ">Running time of BFS is $O(n + m)$ for graphs with $n$ vertices and $m$ edges.\n",
        "\n",
        ">Space complexity is $O(n)$ since parent list, distance list each require $O(n)$ space and the queue can have size at most $n$.\n",
        "\n"
      ],
      "metadata": {
        "id": "6ijPL_PA8LeC"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#Time complexity analysis\n",
        "\n",
        "from collections import deque\n",
        "\n",
        "def bfs(G,s):\n",
        "  # number of vertices in G\n",
        "  n = len(G)             #O(1) time, O(1) space\n",
        "\n",
        "  # initialize dist to be max possible distance\n",
        "  dist = [float('inf')]*len(G)      #O(n) time, O(n) space\n",
        "\n",
        "  # noting down the parent of each vertex\n",
        "  parent = [None]*len(G)     #O(n) time, O(n) space\n",
        "\n",
        "  # start the search from s\n",
        "  dist[s] = 0               #O(1) time\n",
        "  queue = deque()           #O(1) time\n",
        "  queue.append(s)               #O(1) time\n",
        "\n",
        "  # start exploring\n",
        "  while len(queue) != 0:       #executes n times - once per vertex\n",
        "    # remove first element in the queue and explore its neighbors\n",
        "    u = queue.popleft()        #O(1) time since we used deque implementation\n",
        "    for v in G[u]:             #executes deg(u) many times\n",
        "      if dist[v] == float('inf'):\n",
        "        # v has not been visited\n",
        "        dist[v] = dist[u] + 1   #O(1) time\n",
        "        parent[v] = u           #O(1) time\n",
        "        queue.append(v)         #O(1) time\n",
        "\n",
        "  # return the list distance storing the shortest distance to each vertex\n",
        "  return dist, parent\n",
        "\n",
        "\n",
        "print(bfs([[1,2],[0,2],[0,1,3],[2]],0))\n",
        "print(bfs([[1,2],[0,2],[0,1],[4],[3]],0))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "8492de26-1492-4db9-9f80-e33cd4827a6e",
        "id": "0Fx2Vduj8tNE"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "([0, 1, 1, 2], [None, 0, 0, 2])\n",
            "([0, 1, 1, inf, inf], [None, 0, 0, None, None])\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# BFS observations\n",
        "\n",
        "1.   Shortest paths discovered - BFS exploration strategy ensures that the shortest path from the start vertex $s$ is discovered for each of the other vertices that are reachable from $s$.\n",
        "\n",
        "2.  Unreachable vertices identified - Vertices which are at a distance of` inf `from the starting vertex are clearly unreachable from $s$.\n",
        "\n",
        "\n",
        "3.   Linear time - The time complexity of BFS is the same as that of DFS. Since each vertex is pushed to the queue only once, its edges are processed exactly once. This ensures that the time spent per edge is $O(1)$. Since the distance and parent lists require an initiation time of $O(|V|)$, the total time taken is $O(|V| + |E|)$.\n",
        "\n"
      ],
      "metadata": {
        "id": "pFxHT-rsnbqm"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Queues\n",
        "\n",
        "A queue is a collection of objects that operates on the First In First Out principle (FIFO) - the first object in is the first object out.\n",
        "\n",
        "Queues are typically used for task scheduling - printers that receive multiple requests execute jobs in a first in first out manner. Printers use queues to maintain task requests. Keyboard buffers use a queue to prevent loss of typed data during lags - and since this data must appear in the sequence in which it was typed, buffers use queues.\n",
        "\n",
        "Queue operations visualization - https://visualgo.net/en/list\n"
      ],
      "metadata": {
        "id": "-dF7bHnAa56J"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Queues - Python Implementation**\n",
        "\n",
        "\n",
        "\n",
        "1.   Queues in python can be implemented using lists.\n",
        "2.   Adding an element - queue.append can be used to add an element to the end of the queue\n",
        "3.   Removing an element - The elment at the front of the queue can be removed by using queue.popleft()\n",
        "4.  Size of the queue - Since python lists store length, one can use len(queue) to find out the number of elements in the queue.\n",
        "\n",
        "\n",
        "Reference - https://www.w3schools.com/python/python_dsa_queues.asp\n",
        "\n",
        "> Play around with the queue data structure using the code below to better understand how to work with queues.\n",
        "\n"
      ],
      "metadata": {
        "id": "I0FYZElknfdN"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Queues\n",
        "from collections import deque\n",
        "\n",
        "queue = deque()\n",
        "\n",
        "# Enqueue\n",
        "queue.append('A')\n",
        "queue.append('B')\n",
        "queue.append('C')\n",
        "print(\"Queue: \", queue)\n",
        "\n",
        "# Peek\n",
        "frontElement = queue[0]\n",
        "print(\"Peek: \", frontElement)\n",
        "\n",
        "# removing an element from the queue removes the earliest element\n",
        "poppedElement = queue.popleft()\n",
        "print(\"Dequeue: \", poppedElement)\n",
        "\n",
        "print(\"Queue after Dequeue: \", queue)\n",
        "\n",
        "# adding an element to the queue adds it to the last position\n",
        "queue.append('D')\n",
        "print(\"Queue after adding D : \", queue)\n",
        "print(queue.popleft())\n",
        "\n",
        "# Size\n",
        "print(\"Size: \", len(queue))\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "MyvYppoIcjdA",
        "outputId": "f7ec1044-9aea-46aa-bed8-ae46a25dc4b9"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Queue:  deque(['A', 'B', 'C'])\n",
            "Peek:  A\n",
            "Dequeue:  A\n",
            "Queue after Dequeue:  deque(['B', 'C'])\n",
            "Queue after adding D :  deque(['B', 'C', 'D'])\n",
            "B\n",
            "Size:  2\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Queue operations (deque implementation)\n",
        "\n",
        "* Enqueue\n",
        "\n",
        "Adding an element to the end of the queue - queue.append(x) [$O(1)$ time]\n",
        "\n",
        "* Dequeue\n",
        "\n",
        "Popping an element from the start of the queue - queue.popleft() [$O(1)$ time]\n",
        "\n",
        ">Deque (pronounced 'Deck') stands for double ended queue and is an abstract data type that supports accessing the first as well as the last element.\n",
        "\n",
        "\n"
      ],
      "metadata": {
        "id": "4xHlPI5RM9LR"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# BFS : Applications\n",
        "\n",
        "\n",
        "\n",
        "*   Shortest paths - BFS helps find shortest paths from $s$ to all other vertices.\n",
        "*   Finding \"close\" vertices - BFS can be used to identify all vertices that are close to $s$ - closeness measured in terms of number of edges needed to reach a vertex.\n",
        "* Graph exploration - Like DFS, BFS uses linear time to explore the connectivity structure of a graph.\n",
        "* Finding paths - Like DFS, BFS helps identify whether there exists any path from one vertex to another.\n",
        "* Cycle Detection - BFS can be used to detect the existence of cycles.\n",
        "\n"
      ],
      "metadata": {
        "id": "7n0_-hqS-emP"
      }
    }
  ]
}