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

@@ -106,9 +106,11 @@
},
"outputs": [],
"source": [
"def path_exists(start, end):\n",
" # TODO: Implement me\n",
" pass"
"class GraphPathExists(Graph):\n",
"\n",
" def path_exists(self, start, end):\n",
" # TODO: Implement me\n",
" pass"
]
},
{
@@ -141,7 +143,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",
@@ -153,9 +155,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",

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",

View File

@@ -5,7 +5,7 @@ class TestPathExists(object):
def test_path_exists(self):
nodes = []
graph = Graph()
graph = GraphPathExists()
for id in range(0, 6):
nodes.append(graph.add_node(id))
graph.add_edge(0, 1, 5)
@@ -17,9 +17,9 @@ class TestPathExists(object):
graph.add_edge(3, 2, 7)
graph.add_edge(3, 4, 8)
assert_equal(path_exists(nodes[0], nodes[2]), True)
assert_equal(path_exists(nodes[0], nodes[0]), True)
assert_equal(path_exists(nodes[4], nodes[5]), False)
assert_equal(graph.path_exists(nodes[0], nodes[2]), True)
assert_equal(graph.path_exists(nodes[0], nodes[0]), True)
assert_equal(graph.path_exists(nodes[4], nodes[5]), False)
print('Success: test_path_exists')