Move graph path exists to a class

This commit is contained in:
Donne Martin
2016-09-10 07:42:21 -04:00
parent 62f806100e
commit cd50f73069
3 changed files with 35 additions and 31 deletions

View File

@@ -124,23 +124,25 @@
"from collections import deque\n",
"\n",
"\n",
"def path_exists(start, end):\n",
" if start is None or end is None:\n",
" return False\n",
" if start is end:\n",
" return True\n",
" queue = deque()\n",
" queue.append(start)\n",
" start.visit_state = State.visited\n",
" while queue:\n",
" node = queue.popleft()\n",
" if node is end:\n",
"class GraphPathExists(Graph):\n",
"\n",
" def path_exists(self, start, end):\n",
" if start is None or end is None:\n",
" return False\n",
" if start is end:\n",
" return True\n",
" for adj_node in node.adjacent:\n",
" if adj_node.visit_state == State.unvisited:\n",
" queue.append(adj_node)\n",
" adj_node.visit_state = State.visited\n",
" return False"
" queue = deque()\n",
" queue.append(start)\n",
" start.visit_state = State.visited\n",
" while queue:\n",
" node = queue.popleft()\n",
" if node is end:\n",
" return True\n",
" for adj_node in node.adj_nodes.values():\n",
" if adj_node.visit_state == State.unvisited:\n",
" queue.append(adj_node)\n",
" adj_node.visit_state = State.visited\n",
" return False"
]
},
{
@@ -174,7 +176,7 @@
"\n",
" def test_path_exists(self):\n",
" nodes = []\n",
" graph = Graph()\n",
" graph = GraphPathExists()\n",
" for id in range(0, 6):\n",
" nodes.append(graph.add_node(id))\n",
" graph.add_edge(0, 1, 5)\n",
@@ -186,9 +188,9 @@
" graph.add_edge(3, 2, 7)\n",
" graph.add_edge(3, 4, 8)\n",
"\n",
" assert_equal(path_exists(nodes[0], nodes[2]), True)\n",
" assert_equal(path_exists(nodes[0], nodes[0]), True)\n",
" assert_equal(path_exists(nodes[4], nodes[5]), False)\n",
" assert_equal(graph.path_exists(nodes[0], nodes[2]), True)\n",
" assert_equal(graph.path_exists(nodes[0], nodes[0]), True)\n",
" assert_equal(graph.path_exists(nodes[4], nodes[5]), False)\n",
"\n",
" print('Success: test_path_exists')\n",
"\n",