Skip to content

Instantly share code, notes, and snippets.

@jrjames83
Created February 25, 2018 22:14
Show Gist options
  • Save jrjames83/eef7aebe82a158ab0c4560dfcda23860 to your computer and use it in GitHub Desktop.
Save jrjames83/eef7aebe82a158ab0c4560dfcda23860 to your computer and use it in GitHub Desktop.
Fundamentals of Graph Traversals in Python (explain it to me like i'm 10 years old)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import networkx as nx\n",
"import matplotlib.pylab as plt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nMX/+fL788kuuXr3qoICFuNn333/PM888Q8eOHbly5QoJCQm8//77dOnSxezQylSrVi169OiB1Wo1\nO5RqsyW5W4H2Sql2SilfYATFZtsV+Azoo5SqpZTyA8Iwat6LmurWDerWLXPXyxjTIecCARg/gZcA\nw0q10xYLD7/0EqNGjSItLY0ZM2bQvHlzunfvzrhx43j33XdJTk4mPz/fkVcivNDhw4d58skn6dmz\nJw0bNiQ5OZmlS5fSrl07s0OrlLsPzShdUdGcwkZKDQYWYSxa8o7Wep5SajyA1vrNgjaTMere5wPL\ntdaLKjpncHCwTpD515VLTYW2bcscd7dZ3bpw+nSJ2TI3btzg4MGDxMfHF70uX75MaGgovXr1olev\nXoSFhdGkSRM7XITwNnv37iUqKor4+Hief/55Jk6cSOPGjc0Oq0rWrFnDu+++y4YNG8wOpQSl1H6t\ndaXFbmxK7o4gyb0KIiPR0dGo6vxbKQUREUYNjUqkpqayd+/eomRvtVpp0aJFUbLv1asXXbt2pVYt\nqVohbqa1Ztu2bURFRXH8+HEmT57M2LFj8fPzMzu0ajl79iy/+MUvSE1NdYmbvIVsTe7yXeoGPu3Y\nkQGffkq1vkWqsMBAs2bNGDJkCEOGDAEgLy+PI0eOFCX8pUuX8v3339OjR48SCb9ly5bViUx4iMIH\nj6Kiorh27RpTp05l5MiR1K5d2+zQaqR169b4+vpy8uTJ6hUmM5n03F1Ybm4ukyZNIiYmhp0jR9L8\n1Vert8CAHYuHZWRkYLVaSwzn+Pn5lUj2PXr0oG459wmE58jJyeHDDz9kwYIFNGjQgOnTp/Poo49y\nyy2eU9UkMjKSxx57jJEjR5odShHpubu5jIwMHn/8cfLy8oiPjzfqaTRvbvoCA40aNaJfv37069cP\nMH4VP378eFGi/+ijj0hOTqZz584lEn67du1c6ldbUX3Xr19n+fLlLFy4kA4dOrBkyRIeeughj/z3\nLbyp6krJ3WZaa1NePXv21KJs3333nb777rv1s88+q3NyckrutFq1jozU+XXq6GtGiv/5ZbFoXbeu\n1pGRRjuTXLt2TX/11Vf61Vdf1cOHD9etWrXSAQEB+pFHHtFz587V27Zt0xkZGabFJ6onPT1dz507\nVzdr1kxHREToffv2mR2Sw3355Ze6V69eZodRApCgbcixMizjYr744gtGjhzJX//6V8aPH19uu8/e\nfptLr73G2OBgSE8Hf3/o2hVGj3bJGjJnz54tcbP2wIEDtGvXrkTvvmPHjh71K72nOH/+PK+//jrL\nly9nyJAhTJkyhY4dO5odllNcvXqV5s2bk56ejq+vr9nhADIs45b+9a9/MXPmTD7++GMeeuihCtt+\nmZTEbU8+CVPLLNLpclq3bk3r1q0ZPnw4YIzXJiYmEh8fz44dO5hfsEBC6amYt956q8mRe68TJ07w\n6quvsnr1akaNGsXXX39N27ZtzQ7LqerXr88dd9zBwYMHCQkJMTucKpHk7gJyc3N56aWX2LJlC3Fx\ncbRv377SY+Li4li0qMJHCVxa7dq16dmzJz179uSZZ54B4OLFi0W9+0WLFrFv3z6aNWtWlOh79epF\n9+7d3X4WhqtLSkpi/vz5bN68mXHjxnH06FGaNfPeQq+F4+7ultxlWMZk6enpPP744yilWL16tU0P\nehT+qnjp0iWPnpWSl5fH0aNHSwznnDhxgnvuuafEcE7r1q3NDtUj7Nmzh6ioKKxWK3/6058YP348\njcopf+FNli9fTmxsLO+//77ZoQAyLOMWvv32W4YMGcLAgQN57bXXbH44aN++fXTv3t2jEzuAj48P\nnTt3pnPnzowdOxagqC5JfHw8K1euZOLEifj6+t40FdNdH5xxNq01W7ZsISoqilOnTvHnP/+Z1atX\nY7FYzA7NZYSFhfHKK69U3tDFSHI3ybZt2xg1ahRz5szh6aefrtKxcXFx9OnTx0GRubaGDRvy0EMP\nFd2T0Fpz8uTJop79J598wuHDh+nYsWOJsfs777zTI6fqVVdeXh5r165l/vz5ZGdnM3XqVEaMGCFP\nH5ehU6dOnD9/nsuXL7tVOQ75lzTBG2+8wezZs1m9ejXh4eFVPn7Xrl1MnDjR/oG5IaUUQUFBBAUF\n8cQTTwDGAhAHDhwgPj6e9evX83//939cu3ataNy+V69ehIaGeuWQw40bN/jggw9YsGABTZo0Ydas\nWTzyyCMyS6kCPj4+9OzZE6vVyoABA8wOx2Yy5u5EOTk5/OlPf+LLL79k/fr13HHHHVU+R15eHk2a\nNCElJQWpiW+7H374ocTY/f79+2nbtm2J4ZxOnTqZuvqPI127do1///vfvPbaa3Tq1Ilp06bRt29f\n+W3GRlOnTsXPz4+ZM2eaHYqMubua9PR0HnvsMXx9fdmzZ0+1e41JSUm0aNFCEnsVtWzZkoiICCIi\njFVnc3JyOHToEPHx8cTFxbFw4UJ+/PFHQkJCSgznmDZLJDXVWBoxMdFYsKVRI6P885gxVXqO4fLl\nyyxZsoQlS5bwwAMPEB0d7dbrgpolNDSUt99+2+wwqsaWJ50c8fKmJ1SPHj2q27dvr1988UWdm5tb\no3MtWbJEjx071k6RieIuXryoN27cqGfOnKkffvhh3bhxY92uXTs9cuRIvXjxYr13716dnZ3t2CD2\n7dM6IsJ40rhu3bKfQI6IMNpV4Ny5c/rll1/W/v7+esyYMTo5OdmxcXu4s2fP6qZNm+r8/HyzQ7H5\nCVVJ7g62efNmHRAQoJcvX26X840cOVK/8847djmXqFheXp5OTk7W7777rh43bpzu3r279vPz0717\n99YvvviiXr16tT516pT9vuHfeENrPz+tlSqZ1Eu/lDLavfHGTadISUnRTz/9tPb399cvvPCCPn36\ntH1iE7pVq1Y6JSXF7DAkuZstPz9f//Of/9TNmzfXsbGxdjvv7bffro8dO2a384mq+emnn/SXX36p\no6Ki9NChQ3WzZs10ixYtdEREhF6wYIGOjY3VV69erfqJCxN7RUm99KtYgv/mm2/0iBEjdNOmTfWM\nGTN0amqqna9cREZG6g8//NDsMKS2jJlycnJ4/vnn2blzJ+vXr7dbLegzZ87Qs2dPLly4IDfCXITW\nmlOnTpUogZyUlMRdd91VYuy+Q4cO5f+bWa0QHn5TOec4jPVwD2MsgdYRYzm04s9J5tWpw0s9e/Kf\nkyd58cUXGTduHA0bNnTAlYpXXnmFc+fOsXjxYlPjkBuqJrl06RKPPfYYFouFPXv22PUbbdeuXdx3\n332S2F2IUorAwEACAwMZMWIEANnZ2XzzzTfEx8cTExPDrFmzyMjIuGkqpr+/v3GSqCijjHMxV4BH\ngGXAb4AbwFdAndIBZGfzwvXrLDhxwuMfajNbWFgYU6ZMMTsMm0nP3Y6Sk5N59NFHGTp0KAsWLLD7\ntLpnn32WwMBAJk2aZNfzCsc7f/58iamYCQkJtG7dmv7du/P3NWuolZtbon0C0A/4ny0nL2ONXGF/\nhWU/Ll++TJ06N/2YdRpbe+7y5IKdbNq0ib59+zJ9+nQWLlzokPnShT134X5uu+02hg4dSlRUFF9+\n+SXp6emsWrWKJ27cIL+MDlYHjKGY3wMxQHpFJ1fKmDYpHKp+/frceeedHDx40OxQbCLJvYa01ixe\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10cd0be80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"graph_dict = {\n",
" 'A' : ['B','S'],\n",
" 'B' : ['A'],\n",
" 'C' : ['D','E','F','S'],\n",
" 'D' : ['C'],\n",
" 'E' : ['C','H'],\n",
" 'F' : ['C','G'],\n",
" 'G' : ['F','S'],\n",
" 'H' : ['E','G'],\n",
" 'S' : ['A','C','G']\n",
"}\n",
"\n",
"G = nx.Graph(graph_dict)\n",
"\n",
"pos = nx.spring_layout(G)\n",
"nx.draw_networkx_nodes(G,pos)\n",
"nx.draw_networkx_edges(G,pos)\n",
"nx.draw_networkx_labels(G,pos)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Forget BFS and DFS for a second, let's come up with a simpleton's approach to at least hitting all the nodes in the graph. That's our goal, hit all the nodes"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def traverse_graph(some_graph, start_node):\n",
" to_visit = [start_node] # list with one item\n",
" visited = [] # empty I have not visited anything\n",
" \n",
" while to_visit:\n",
" node_to_checkout = to_visit.pop(0)\n",
" for neighbor_node in some_graph[node_to_checkout]:\n",
" if neighbor_node not in visited:\n",
" to_visit.insert(0, neighbor_node) # put in route plan\n",
" visited.append(neighbor_node) # note that we already added\n",
" \n",
" return visited"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['A', 'B', 'S', 'C', 'G', 'F', 'D', 'E', 'H']"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"traverse_graph(graph_dict, 'B')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'S'}"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set(graph_dict.keys()) "
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'S'}"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set(traverse_graph(graph_dict, 'B'))"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"while []:\n",
" print('this will never work')\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"this will print forever without that break below\n"
]
}
],
"source": [
"while [1,2]:\n",
" print('this will print forever without that break below')\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"B\n",
"S\n"
]
}
],
"source": [
"# How to process a node and prepare to update the route plan\n",
"for some_list_item in graph_dict['A']:\n",
" print(some_list_item)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [conda env:3point6]",
"language": "python",
"name": "conda-env-3point6-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment