{
  "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 10 - Connectivity in graphs and Depth First Search\n",
        "\n",
        "In this lecture, we will discuss-\n",
        "\n",
        "1.   How graphs are represented in python\n",
        "2.   Connectivity - paths, walks and cycles\n",
        "3.   Maze solving\n",
        "4.   Idea of exploring a graph\n",
        "5.   Systematic implementation of graph exploration - DFS\n",
        "6.   DFS algorithm and its implementation on an undirected graph\n",
        "\n",
        "\n",
        "Announcements -\n",
        "\n",
        "1. Homework 2 due TONIGHT - Office hours 5pm-10pm\n",
        "2. Exam 1 slot reservation with CBTF\n",
        "3. Homework 3 to be released tomorrow - deadline Tuesday (March 10) - Update course website!\n",
        "\n"
      ],
      "metadata": {
        "id": "n1GLAlvo5b37"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Adjacency matrix representation\n",
        "\n",
        "As we discussed last time, there is a rather straightforward representation of a graph $G = (V,E)$ with $V=\\{0,1,2,\\dots,(n-1)\\}$ involving the adjacency matrix $A_{n \\times n}$- specifically,\n",
        " $$(i,j) \\in E ⇔ A[i][j] = 1$$\n",
        " and\n",
        " $$(i,j) \\not\\in E ⇔ A[i][j] = 0$$\n",
        "\n",
        " ![Screenshot 2026-02-23 132215.png](data:image/png;base64,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aeDfMho9u0fWKIis4enXArE9uyO8BmFhHfsdMzT1ERrTHV3bVx+e1rLf+SByTHyfExERycAAJSIikoEBSkREJAMfIiK7MRqNePbZZ5Gfny+WFNPr9bBYLPDz8xNLip07dw5BQUHw8PAQS4qUlpaiuLgYgYGBYkmxS5cuwcfHB3Xq3NiqzzZMJhMuXbqE4OBgsaRYWVkZkpOTERMTI5aInAIDlOwqLy8Pp0+fFpeJ4OHhgdjYWHGZyGkwQImIiGTgPVAiIiIZGKBEREQyMECJiIhkYIASERHJwAAlIiKSgQFKREQkAwOUiIhIBgYoERGRDAxQIiIiGRigREREMjBAiYiIZGCAEhERycAAJSIikoEBSkREJAMDlIiISAYGKBERkQwMUCIiIhkYoERERDIwQImIiGRggBIREcnAACUiIpKBAUpERCQDA5SIiEgGBigREZEMDFAiIiIZGKBEREQyMECJiIhkYIASERHJwAAlIiKSgQFKREQkAwOUiIhIBgYoERGRDAxQIiIiGRigREREMjBAiYiIZGCAEhERycAAJSIikoEBSkREJAMDlIiISAYGKBERkQwMUCIiIhkYoERERDIwQImIiGRggBIREcnAACUiIpKBAUpERCQDA5SIiEgGBigREZEMDFAiIiIZGKBEREQyMECJiIhkYIASERHJwAAlIiKSgQFKREQkAwOUiIhIBgYoERGRDAxQIiIiGRigREREMjBAiYiIZGCAEhERyfD/AY2dYBKnCitCAAAAAElFTkSuQmCC)"
      ],
      "metadata": {
        "id": "-Xdf4q1x6N-p"
      }
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "0HgF1dCj5ZKp",
        "outputId": "5c368372-d672-4dbe-f993-65a0c6d4c886"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[[0, 1, 1, 0, 1], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]\n",
            "Outgoing edge from vertex 1 to 2\n"
          ]
        }
      ],
      "source": [
        "#Adjacency matrix representation for graphs - List of lists\n",
        "\n",
        "A = [[0,1,1,0,1],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,0],[0,0,0,0,0]]\n",
        "print(A)\n",
        "\n",
        "#Outgoing edges of vertex 1 -\n",
        "\n",
        "for i in range(len(A)):\n",
        "  if(A[1][i]==1):\n",
        "    print(\"Outgoing edge from vertex 1 to \" + str(i))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Adjacency List representation\n",
        "\n",
        "The adjacency list representation uses lists to represent edges of each vertex in the graph. For an $n$ vertex graph, there are $n$ adjacency lists - $A[0],A[1],A[2],\\dots,A[n-1]$ representing outgoing edges of each vertex.\n",
        "\n",
        "For example, $A[i]$ is the list consisting of all outgoing edges of vertex $i$.\n",
        "\n",
        "![Screenshot 2026-02-23 134007.png](data:image/png;base64,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)"
      ],
      "metadata": {
        "id": "QlZ3mG9R-xsu"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#Adjacency list representation for Graphs - lists of outgoing edges\n",
        "\n",
        "A=[[1,2,4],[2],[3],[ ],[ ]]\n",
        "print(A)\n",
        "\n",
        "#Outgoing edges of vertex 1 -\n",
        "\n",
        "print(\"Outgoing edges of vertex 1 are : \" + str(A[1]))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "yTPnUJBc-Ff9",
        "outputId": "ef7fcfdb-84af-4d96-f06e-8a6d6372e2a4"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[[1, 2, 4], [2], [3], [], []]\n",
            "Outgoing edges of vertex 1 are : [2]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Preferred choice - Adjacency list\n",
        "\n",
        "Due to the compact nature of representing a graph, we will generally prefer the adjacency list representation of graphs in our graph problems.\n",
        "\n",
        "\n",
        "\n",
        "> In the adjacency list representation, what is the time complexity of finding out if edge $(i,j)$ exists?\n",
        "\n"
      ],
      "metadata": {
        "id": "u4dJrWzAD1Kb"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Connectivity in graphs\n",
        "\n",
        "Consider the following graph $G$ - ![Screenshot 2026-02-23 140356.png](data:image/png;base64,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AqAScaR2DVE74mdRUVHq2rWr/vrXv+ro0aMKCgoytwCoBBypXSNZWVl64oknNG/ePALNi23atEmjRo1SQUGBpk2bJknaunWruQ1AJeFI7Rrhakf8bPv27YqIiLj479GjRysuLq7UHgCVg1BzUkZGhjIyMiRJjRs3VpMmTcwt1I64THZ2tkaPHq2PPvpIknSl/+0yMzN1/PhxFRcXq169emrRooW5BXBJXl6ejhw5osLCQgUEBKhly5a2vc2EUCuHZVn6/PPPFR8fr8TEROXm5qpZs2by8fHRyZMn5e/vr4iICI0cOVJ9+/ZVTk4OVzviqt599109//zz2r59u7p27ark5GTNmTNHmzZtUnp6uoKCguTr66tz584pLy9P4eHhGjx4sB599FHVrl3bfDvgqg4ePKjZs2drzZo1OnDggIKCguTn56fs7GydPn1aYWFhGjBggEaPHq369eubL/dcFq5q7dq1VuvWra1OnTpZcXFxVlpamrnFOnTokBUfH2917drVuuWWW6xBgwZZTzzxhLkNuGjKlClW+/btrbvuustq1aqVNW3aNGv37t1WcXFxqX2nTp2yli1bZt13333WjTfeaM2ePbvUHLiSU6dOWQ8//LDVuHFja/z48daXX35p5efnl9qTmZlprV271ho+fLhVv35966WXXrIKCgpK7fFUhNoVFBUVWWPHjrVatGhhrVq1yhxf1dq1a62goCBr5MiRVmFhoTkGLMuyrPfee89q0KCBFRsbe1mQXc2ePXusrl27Wr1797bOnj1rjgHLsixr5cqVVtOmTa2JEydaeXl55viKTp48aQ0aNMgKCQmx9u3bZ449DqFmKCoqsoYMGWL16dPH+vHHH81xuc6fP2/169fPGjhwIMGGy7z++utWmzZtrEOHDpmjchUVFVkvvPCC1bFjR4INl1m+fLnVpEkTKzEx0Rw5ZN68eVbz5s2t1NRUc+RROKdmiI6O1t69e/XJJ5+4fA7jwoULeuihh9S0aVPNnTvXHMNLxcfHa+rUqUpISFDTpk3NscPGjx+vLVu2aNOmTbY92Q/nJCUlacCAAVq1apU6duxojh22aNEiTZgwQV9//bUaNGhgjj0CoXaJDRs2aPjw4UpJSdENN9xgjp2SnZ2t0NBQzZw5U/fee685hpc5cuSIwsPDlZCQUOGn9luWpd69e6t3794aP368OYaX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)\n",
        "\n",
        "One of the most important questions we would like to understand is whether two vertices $u,v \\in V$ are \"connected\"? What do we mean by this? Well, we would like to understand if there is some way of reaching vertex $v$ starting from vertex $u$.\n",
        "\n",
        "Note that there are two ways of reaching vertex 3 from vertex 0 -\n",
        "\n",
        "1.   Use edge (0,2) to go from 0 to 2 and then edge (2,3) to go from 2 to 3.\n",
        "2.   Use edge (0,1) to go from 0 to 1, then edge (1,2) to go from 1 to 2 and finally edge (2,3) to go from 2 to 3.\n",
        "\n",
        "However, if we were to ask whether we could reach vertex 0 from vertex 3, the answer is no since the graph's edges do not support this (in fact, there is no way to go from 3 to any other vertex!)\n",
        "\n",
        " Let us give some formal definitions to this end.\n",
        "\n",
        "#Path\n",
        "\n",
        "*   Path - A sequence of vertices with the property that each consecutive pair of vertices has an edge in $G$.\n",
        "\n",
        "For example, in the above graph, 0,1,2,3 is a path as there is an edge between (0,1),(1,2) and (2,3).\n",
        "\n",
        "For this graph, 0,2,4 is not a path since there is no edge between (2,4) (even though there is an edge between (0,2)).\n",
        "\n",
        "In the above graph, there are two paths from 0 to 3 while there are no paths from 3 to 0 - and this captures the essence of connectivity between these vertices.\n",
        "\n",
        "\n",
        "---\n",
        "# Cycle\n",
        "\n",
        "*   Cycle - A cycle is a path $v_{1},v_{2},v_{3},\\dots,v_{k}$ in which the first $(k-1)$ vertices are distinct and $v_{1} = v_{k}$. That is, this is a path that cycles back to vertex $v_{1}$. In this case, this cycle has length $(k-1)$.\n",
        "\n",
        "In the above graph, there is no cycle as there is no such path that ends with the starting vertex.\n",
        "\n",
        "![Screenshot 2026-02-23 143042.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXMAAADqCAYAAABQpKWtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABnWSURBVHhe7d15WJVlwgbwWwHNilISEWQRNEEERDwI0jhaKo5JdtnnmuO440bbmFZept94VYM6n0aDmTrmMq7lJDYtKqghIiIHFNHUxAWnXABFBZTlnPN8f0ySPLIJBz3nee/fdfnPc7/whxfn5nDzck4TIYQAERFZtabyARERWR+WORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKaCKEEPIhUVWuXbsGvV6PjIwM5Ofnw2Qywd7eHv7+/tDpdPD09JQ/hIgeEj4zpxoZDAZs27YNffr0QYcOHbBw4UIUFBSgXbt28PDwgI2NDTZu3IhevXqhY8eOWLJkCW7cuCF/GiJqZHxmTtVKSUnBuHHj4OTkhNdeew1DhgyBra2tfFmFQ4cOITY2Fjt37sRHH32EyMhI+RIiaiQsc6rS3Llz8fnnn2PZsmUYMmSIHNfo5MmTGDt2LBwcHLBlyxa0bNlSvoSIzIxlTveJiopCRkYGvv76a7Ru3VqO68RoNGLmzJlITk5GfHw8C52okbHMqZL33nsPiYmJ2LlzJ5566ik5fmB3Cz0pKQl2dnZyTERmwjKnCklJSRg1ahSOHTsGBwcHOa63wYMHIzAwEAsWLJAjIjITljkBAMrKyuDr64uPP/4YERERctwgV65cQWBgIHbt2oWuXbvKMRGZAW9NJADA1q1b0aFDB7MXOQC0bdsWs2fPxuLFi+WIiMyEz8wJABASEoK5c+fipZdekqNKDMUFuFZYit++aJqg2ZMOcHiy5j38xo0b8PLywqlTp9CmTRs5JqIG4jNzwsWLF5GTk4NBgwbJkcSEy1kJWPlGOPzCZ+OL73Zi585vsemTtzDohT9i/ZEi+QMqtGzZEoMGDcKOHTvkiIjMgGVOSEtLQ48ePdC0aW1fDk3hFhoBn6cB3bA/Y8aEcRg3bgKi5izBDP+T+OCv2+UPqCQ0NBRpaWnyMRGZQW2PXtKA9PR06HQ6+bhKouxHJKcZENLrWdjcPTTl4cy5Ajh5uFW+WKLT6ZCeni4fE5EZsMwJubm5cHFxkY+rVPZzKg7nd0VYUAsAgLEoG1vm/RkJbd7Binm/ly+vxMXFBXl5efIxEZkBy5xgNBprfM2Ve+Unp+CiiwNyd3+FbV9swKdLP0V8rg+mv/sqfO1r/nKysbGB0WiUj4nIDGp+9JEmPPHEE7h165Z8XIVSpCQdg1/EZLw6dCiGDv8jXnt/Cf6313lMGvERssprvjGqsLAQTzzxhHxMRGbAMif4+fkhMzNTPr6PKDuOZH05gn93z14OwNa2KUquXsa1Wsr86NGj6NKli3xMRGbAMifodLo63WVS9nMqUnP9KvZyADAUpGJJbBLCZkxF2OM1fznp9XoEBwfLx0RkBvyjIUJ5eTnatWuHgwcPomPHjnIM4A6OxH2ObVtXY9khF7zxWj+0amrCnZv5OH8yGw79Z2LO+BA8VUOXCyHg4+ODdevWITQ0VI6JqIFY5gQAePfdd1FWVoYlS5bIkVns2rUL7733HjIyMuSIiMyAZU7Ar38FGhQUhKysLDg7O8txgwgh0KdPH4wbNw7jx4+XYyIygxp+MCYtcXd3R1RUFCZPnixHDRYbGwuj0YixY8fKERGZCZ+ZU4Xy8nKEhobi1VdfxcyZM+W4XlJTUxEREYGUlJRq9ngiMgc+M6cKdnZ2iIuLw/LlyxETEyPHDyw1NRWDBw/G+vXrWeREjYxlTpW4ublh3759iI2NxZQpU1BUVP0rIVZHCIHly5cjIiICa9euxcCBA+VLiMjMWOZ0Hzc3N+zatQvJyckICAjAhg0bUFZWJl9WpcTERPTv3x9/+9vfsHDhQhY50UPCzZyqNHz4cHh6eiI8PByLFi1CZmYmRo4ciZCQEOh0Ojg5OcHGxgY3b97EkSNHoNfr8dVXX6G8vByvv/46PD09ERkZiaysLLO8MTQR1YxlTvf58ssvMX/+fBw5cgTNmzcHAJw+fRrbt2+HXq9HRkYG8vPzYTQaYW9vj4CAAOh0OvTr1w8vvPBCxeeZOnUqTCYTVq5cec9nJ6LGwDKnSvLy8hAQEIC4uDiEhITI8QMpLCxEQEAAVqxYgfDwcDkmIjNimVMld+eVhQsXylG9JCQkYOLEiZxbiBoZy5wqVDWvmAPnFqLGxzIn4J55ZceOHejRo4ccN8jduWXlypXo37+/HBORGbDMCWiEeUWWkJCASZMm4dixY5xbiBoBy5wabV6RcW4hajwsc41rzHlFxrmFqPGwzDVu+PDh8PLyQnR0tBw1Cs4tRI2DZa5hD2tekXFuITI/lrlG5efnw9/f3yx/HPSgCgsL4e/vj1WrVnFuITITlrlGjRgxAu3bt2+0u1dqc3duycrKgr29vRwT0QNimWvQtm3bMG/evIc+r8imTJkCAFixYoUcEdEDYplrjDlfe6WhOLcQmQ/LXGMa+4+DHlR8fDwmT57Mu1uIGohlriGP6u6V2kyZMgVCCN7dQtQALHONsKR5Rca5hajhWOYaYWnzioxzC1HDsMw1wFLnFRnnFqL6Y5krzpLnFRnnFqL6Y5krztLnFRnnFqL6YZkrzFL+OOhBcW4henAsc0VZ07wi49xC9OBY5oqytnlFdndu4Wu3ENUNy1xB1jqvyPjaLUR1xzJXzKN8aVtz4zsTEdUdy1wxj/qlbc2NL5VLVDcsc4WoMq/IOLcQ1Y5lrghrvnulNry7hah2LHNFWPvdK7Xh3S1ENWOZK0DVeUXGuYWoeixzK6fyvCLj3EJUPZa5lVN9XpFxbiGqGsvcimllXpFxbiG6H8vcSmlpXpFxbiG6H8vcSmltXpFxbiGqjGVuhbQ6r8g4txD9hmVuZbQ8r8g4txD9hmVuZbQ+r8j4zkRE/8UytyLW8sbMDxvfmYiIZW41OK9Uj3MLEcvcanBeqRnnFtI6lrkV4LxSN5xbSMtY5haO80rdcW4hLWOZWzjOKw+GcwtpFcvcgnFeqR/OLaRFLHMLxXml/ji3kBaxzC0U55WG4dxCWsMyt0CcV8yDcwtpCcvcwnBeMR/OLaQlLHMLw3nFvDi3kFawzC0I55XGwbmFtIBlbiE4rzQezi2kBSxzC8F5pXFxbiHVscwtAOeVh4NzC6mMZf6IcV55eDi3kMpY5o8Y55WHi3MLqYpl/ghxXnk0OLeQiljmjwjnlUeHcwupiGX+iHBeebQ4t5BqWOaPAOcVy8C5hVTCMn/IOK9YDs4tpBKW+UPGecWycG4hVbDMHyLOK5aJcwupgGX+kHBesVycW0gFLPOHhPOKZUtISMCkSZM4t5DVYpk/BJxXrAPnFrJmLPNGxnnFenBuIWvGMm9knFesC+cWslYs80bEecU6cW4ha8QybyScV6zX3bll5cqVCA8Pl2Mii8QybyScV6xbQkICJk6ciKysLM4tZBVY5o2A84oaOLeQNWGZmxnnFXVwbiFrwjI3M84rauHcQtaCZW5GnFfUxLmFrAHL3Ew4r6iLcwtZA5a5mXBeURvnFrJ0LHMz4LyiDZxbyJKxzBuI84p2cG4hS8YybyDOK9rCuYUsFcu8ATivaBPnFrJELPN64ryiXZxbyBKxzOuJ84q2cW4hS8MyrwfOKwTOLWRhWOYPiPMK3cW5hSwJy/wBcV6he9VlbjEajSgpKYGNjQ0ee+wxOaZfFRQUID09Hb/88guMRiMee+wxeHt7IyAgAHZ2dvLlJNF0me/fvx9JSUnQ6/XIzs5GSUkJmjVrBk9PT+h0Ojz33HPo27cvmjZtCnBeoWrIc8vt27exdetW7Nu3D2lpacjOzkbz5s1hMBjw+OOPQ6fToUePHhg1ahS6dOkifzpN+eWXX/DZZ59hy5YtuHr1KoKCguDh4QFbW1sUFxfjxIkTOHfuHLp3747JkydjxIgRaNasmfxpSItlXl5ejlWrViE2Nha2trb4wx/+AJ1Oh86dO6NFixYoLS3FTz/9BL1ej4SEBOTm5mL69OkYPnw4QkNDOa/Qfe7OLUuXLkVKSgrWrFmDsLAwDB48GMHBwfD19YWtrS0AIDc3F3q9HsnJyVi7di28vb0xb9489OnTR/60Srtx4wZmzpyJuLg4jB49GpMmTYKfn1/FE6d7FRcXY8+ePVi2bBkyMzPx4YcfYuLEifJlJDTk6NGjomvXrmLgwIEiMTFRjquUlpYmRowYIdq1ayciIyPlmEgIIcTixYuFo6OjiIyMFOfPn5fjKpWVlYlNmzYJNzc3MWPGDFFUVCRfoqT4+Hjh5uYmoqKixK1bt+S4RpmZmSIoKEi8+OKL4sqVK3KsaZop882bN4s2bdqIdevWyVGd7NixQ7i4uIhPPvlEjkjjYmNjhaurq4iPj5ejOikoKBBjxowR3bp1E9euXZNjpWzbtk20bdtW7NmzR47qrLy8XMyZM0d06tRJXLp0SY41SxNlvnnzZuHs7CyOHz8uRw8kJydHeHl5sdCpQmxsrGjfvn2dn43XZPbs2aJbt27i+vXrcqSEuLg40bZtW3H06FE5qpfo6GjRqVMnkZubK0eapHyZZ2RkiDZt2jS4yO/KyckRbm5uYvfu3XJEGnPgwAHh7OxsliK/6/XXXxevvPKKfGz1fv75Z+Ho6CjS0tLkqEFmzZolhgwZIh9rktJlXlpaKvz8/MSGDRvkqEHi4+OFu7u7uHHjhhyRRhQXF4tnn31WxMXFyVGD3P2a3bhxoxxZtYEDB4oFCxbIxw1WWloq/P39zf4Yt0ZK380SExODPXv24Ouvv5ajBouMjISDgwOio6PliDRg0aJFSE9Px9atW+WowfR6PV5++WVcuHBBifur9+/fjylTpiArK6virh5zSk1NxciRI3H27Nkq74bRDLndVWEymUTHjh1FSkqKHNWiWKTt+E6cKzfJQSXZ2dnC0dFR3LlzR45IcUajUXh4eIj09HQ5qoZRFJxPFd98sUl8+W2quHzHJEzll8TZC8XyhRVeeOEFsXnzZvnYKg0bNkzExsbKx5JycSv/irh8+fJv/67ki9sG+bqqhYaGmv2nJGuj7LexPXv24Omnn0ZoaKgc1agoIxaRkz7Dsds1/8DSoUMHBAcHY9u2bXJEitu9ezecnZ0RFBQkR/cpOvNvzBn3R8xbfwTCtRuC3G/hq4Uf4v1pk7D6uFG+vEJUVBRWrFghH1udgoICxMfH409/+pMcVWbMQ/qu9Zja2wcvvb0O3+3cie92bMCiWWMwdMJSHCkwyR9RyfTp07F69Wr5WFOULfPExEQMHDhQPq6Z8Ty+3JGKspI8XLlaLqf3GThwIPbv3y8fk+KSkpIwYMAA+fg+11M/xpAx/4T/7H/gk3lTENHTB15+/TB5iifSd9uge8gT8odU6NevH9LS0mAwGOTIqqSlpaFbt26wt7eXo8psnPH7l/3RotQTI956AxPGjcOEyDcwf8k/8Fb77zFtzve4LX/MPfr27YtDhw7Jx5qibJnr9XoEBwfLxzUw4cK/v0GzQaPh17IAV6/U/iAKDg6GXq+Xj0lxer0eOp1OPq7EkPc93hi7AkHzlmGU7+OVMlsHX3Qf+Ht0b9mk0vm97O3t4e7ujhMnTsiRVUlLS6v1/+qu25kHkdEkCCG+975URnN0ffH3KP5+G9LuVP/TsouLC2xtbZGTkyNHmqFsmZ85cwa+vr7ycbVM15Pw9eVuGBLojratinD1SvU/At/VpUsX/PTTT/IxKa72ry0DUmKjEd9yJCaHt5ZDNLF1x4jpw+BqW32ZA4Cvr6/Vf32dPXsWPj4+8nEVjMhOToOpWy90fazy/4u4cwe3C2+h2Fh9mQNA586dkZ2dLR9rhrJ3s7i6uiI1NRXt2rWToyrcRuKKz2E7bDqea/kL/tq/JzKGHMTWKPcav9sZjUY0a9YMzzzzjByRwgwGA06cOAFnZ2c5AgAIw1G83SMcJ16Jx7dzu8JGvqCOxowZg+TkZBQVFcmR1XB0dMTcuXMxatQoOarMlI/YV3pgX+/d+PKtjvc87kzIXj4Uocu8sCdjMbo2q/4bYEREBKZNm4ZBgwbJkSYoW+aenp7Yu3cvPD095eg+xceWYeqinxEQ+AyaoAz6Df+H3IjvEP9BSI0PxDt37sDBwUHTP9ppUXBwMPbv3w8PDw85AgCI299gqFck3FecwtKX739Z3NtXLqHU0QWtavriAjBixAgMGDAAERERcmQ13nzzTQwYMABjx46Vo0pMxTsxust76P6vFLzd/Z6XCTZdRszgMMR13YCED5+r8fEYHh6OWbNmoX///nKkDfLtLaro3bt33f5K03BB/HPJP0VOxa2IpeLfUUEiYMJ2USpdKsvMzBQ+Pj7yMSmuV69eIiEhQT6uYCrZLyZ1ai9mflPFi0gZL4t/rYkTuYaab30VQoigoKB63FprWebOnSvmzZsnH9+n8OA84e05URy4Xfn/5XrS+8LfZ5zYfaW80nlVvLy8xMmTJ+VjzahpRbBqOp2uDr+cNODkF1sgnn8F7hX7ZVM4ObfCzdw8lNTyM0tdfhFG6qnta6tJcx2GveyC1N0pKK6UlOLYjjjY9QiHo031cwEAlJaW4tSpUwgMDJQjq6LT6ZCWliYfS4zIPnAYpm6/g/89e3nRT1/iz385jtfWL0V/p5r/2Oj69evIz8+Ht7e3HGmGsmUeFhaGPXv2yMcVDHmpWDZrJF6Z/S8cO30e//11pxGndq7EusQc3PwxDks+/wG5NfzSZe/evejZs6d8TIrr2bMnfvjhB/n4Hi3Qf/5n+J8bMZgydw32Hc5A8s4t+PvCWJzxGIaXfFvIH3CfgwcPonPnzlb/zkQ9evTA4cOHUV5e9a2+psLj2BrzAf6yNhVN7vyIf8R8jKVLluLvMQsRvTEPU9ZvweTglvKH3efAgQPo3r07mjSp+ZukypTdzMvKyuDu7o7ExMRG+W6dl5cHb29vnD17Fq1atZJjUlhJSQnc3d1x6NAheHl5yfE9jCi4+COOnc7DUx0CEeDlUOPme69hw4ahT58+mDFjhhxZnb59+2LSpEm1/xK0AQYNGoShQ4di/PjxcqQZypY5ALz//vvIzc1tlL+kmz9/Pi5duoRVq1bJEWnAO++8g5KSEsTExMhRg124cAHdu3dHTk4OnnzySTm2Otu3b8fixYtx8OBBOTKL7OxshIWF4eLFi1b/k0yDyCO6Sq5fvy5cXV3FDz/8IEcNkpWVJRwdHUVOTo4ckUZcvXpVtG3bVhw+fFiOGsRkMol+/fqJ6OhoObJaBoNBBAYGirVr18qRWfTv31+p/6/6UrrMhRDi22+/FZ6enmZ7AfvCwkIRGBgoVq9eLUekMVu3bhWdO3d+4Lc+q0lMTIwIDQ0VBkMdX2HKSmRmZgpHR0dx8eJFOWqQTz/9VISEhCj3/1Ufype5EELMnz9f+Pn5NbjQCwsLxXPPPSemTp0qR6RRUVFRIiwszCyFvmbNGuHq6iqys7PlSAlLly4VnTt3FpcvX5ajetm+fbtwcnISp06dkiNN0kSZi18LvVOnTiI1NVWO6uTEiRMiKChITJ06VZhMtd8jTNpgMpnE9OnTRXBwcL1L2Gg0iujoaOHq6ipOnz4tx0r54IMPhI+Pjzh37pwcPZBNmzYJJycnkZGRIUeapZkyF0KIL774Qjg5OYm33367zs8Orl27JhYsWCAcHR3FqlWr5JhImEwmsXTpUtG6dWsRExMjSkpK5EuqlZmZKcLCwsTzzz8vLly4IMdKio2NFa1btxbLly+Xo1pdu3ZNjBo1Snh7e5vtvURVoakyF7/+4mratGmiVatWYuTIkWLt2rXi+PHjwmg0CvHrA/P06dNi48aNYvz48aJVq1Zi7NixmnmgUf2dPn1avPjii8LJyUnMmTNHHDp0qMo3L7lw4YLYuHGj6N27t2jXrp1YtmyZ5n7aO3nypAgJCRF+fn5i+fLloqioSL6kkuzsbPHWW2+JZ555Rrz55pvi9u3b8iWap/StiTW5efMmNm3ahKSkJOj1epw9exa2trYwGAxwd3eHTqdDWFgYxowZg9at73/lO6LqnDlzBitWrMC+fftw6tQptG/fHvb29igvL8d//vMf2NnZITg4GKNHj8aQIUMa5a3UrMXevXsRGxuL3bt3w9fXF8HBwfDw8ICdnR2Ki4tx/Phx6PV63Lp1CxMmTMC0adOqfU0crdNsmVelrKwMdnZ2mv4rMjKvkpISZGdno7i4GLa2tnB2doaLi4t8meYVFxfjyJEj0Ov1uHTpEgwGA1q0aAFvb28EBwfD29tb2+/vWQcscyIiBfBbHRGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESmAZU5EpACWORGRAljmREQKYJkTESng/wHVL86ECEaWuAAAAABJRU5ErkJggg==)\n",
        "\n",
        "\n",
        "In this graph, since A,B,C,A is a valid path (as edges (A,B),(B,C) and (C,A) exist), this is a cycle of length 3."
      ],
      "metadata": {
        "id": "sB3OuHQHEloA"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Connected graphs (Undirected)\n",
        "\n",
        "We say that a graph $G$ is connected, if for every pair of vertices $(u,v) \\in V \\times V$, there is a path from $u$ to $v$.\n",
        "\n",
        "![Screenshot 2026-02-23 143042.png](data:image/png;base64,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)\n",
        "\n",
        "In the graph above, observe that each of the following pairs have a path between them - (A,B), (A,C), (A,D), (B,A), (B,C), (B,D), (C,A), (C,B), (C,D), (D,A), (D,B), (D,C) as well as (A,A), (B,B), (C,C), (D,D).  Some examples -\n",
        "\n",
        "\n",
        "*   (A,C) - path A,B,C or path A,C\n",
        "*   (B,D) - path B,C,D or path B,C,D,C,A,C,D (not simple)\n",
        "\n",
        "\n",
        "Hence, this graph is **connected** - that is, there is atleast one path between any two vertices.\n",
        "\n",
        "> **Simple paths** are paths with all *distinct* vertices.\n",
        "\n",
        "\n",
        "\n",
        "![Screenshot 2026-02-23 144357.png](data:image/png;base64,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)\n",
        "\n",
        "In this graph, however, since there is no path between (A,D), the graph is **not connected**."
      ],
      "metadata": {
        "id": "wK-E4OtxN1f_"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Establishing connectivity in (Undirected) graphs\n",
        "\n",
        "Given a graph $G$, how can we decide if it is connected?\n",
        "\n",
        "Before we get to that, let us consider the problem of solving a maze.\n",
        "\n",
        "Maze resource -\n",
        "\n",
        "https://medium.com/swlh/solving-mazes-with-depth-first-search-e315771317ae\n",
        "\n",
        "As you try to solve the maze, answer the following questions-\n",
        "\n",
        "\n",
        "*   When is it the case that the maze has a \"solution\"? When does it not?\n",
        "*   How do you go about finding a path from the start to the end?\n",
        "*   When do you decide against following a path?\n",
        "*   How do you retract from such paths and move forward along a different path?\n",
        "*   What information do you need to be able to execute such moves?\n",
        "\n",
        "\n",
        "\n"
      ],
      "metadata": {
        "id": "dgb80cwMQVqZ"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "\n",
        "DFS visualization resource -\n",
        "https://www.cs.usfca.edu/~galles/visualization/DFS.html"
      ],
      "metadata": {
        "id": "u46yGgq4Vf8O"
      }
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "aqOD928EOSNw"
      },
      "execution_count": null,
      "outputs": []
    }
  ]
}