Skip to content

Instantly share code, notes, and snippets.

@travishen
Created December 7, 2018 08:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save travishen/761e8028fda4b257e7fe6f24d77e980a to your computer and use it in GitHub Desktop.
Save travishen/761e8028fda4b257e7fe6f24d77e980a to your computer and use it in GitHub Desktop.
DFS implements using Python
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"class Node:\n",
" \n",
" def __init__(self, name):\n",
" self.name = name\n",
" self.visited = False\n",
" self.neighbors = []\n",
" self.predecessor = None # use in shortest path\n",
" \n",
" def __repr__(self):\n",
" return 'Node(name={})'.format(self.name)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"class DFS:\n",
" \"\"\"\n",
" For BFS, use queue; For DFS, use stack / recursion(os stack)\n",
" \"\"\"\n",
" def __init__(self, start):\n",
" self.start = start\n",
" \n",
" def traversal(self):\n",
" interface = self.stack()\n",
" interface(self.start)\n",
" return self.result\n",
" \n",
" def stack(self):\n",
" self.result = []\n",
" def interface(node):\n",
" self.result.append(node) \n",
" node.visited = True\n",
" for n in node.neighbors:\n",
" if not n.visited:\n",
" interface(n) \n",
" return interface"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![image](https://storage.googleapis.com/ssivart/super9-blog/level-order-traversal.png)\n",
"[圖片來源](http://alrightchiu.github.io/SecondRound/graph-breadth-first-searchbfsguang-du-you-xian-sou-xun.html)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"na = Node('A')\n",
"nb = Node('B')\n",
"nc = Node('C')\n",
"nd = Node('D')\n",
"ne = Node('E')\n",
"nf = Node('F')\n",
"\n",
"na.neighbors = [nb, nc]\n",
"nb.neighbors = [nd, ne]\n",
"nc.neighbors = [nf]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"dfs = DFS(na)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Node(name=A)\n",
"Node(name=B)\n",
"Node(name=D)\n",
"Node(name=E)\n",
"Node(name=C)\n",
"Node(name=F)\n"
]
}
],
"source": [
"for node in dfs.traversal():\n",
" print(node)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment