コード例 #1
0
 def setUp(self):
     self.g = Graph(5)
     self.g.add_edge(0, 1, 4)
     self.g.add_edge(0, 2, 1)
     self.g.add_edge(2, 1, 2)
     self.g.add_edge(1, 3, 1)
     self.g.add_edge(2, 3, 5)
     self.g.add_edge(3, 4, 3)
コード例 #2
0
 def test_isomorphic_trees_00(self):
     g = Graph(9)
     g.add_undirected_edge(0, 1, 0)
     g.add_undirected_edge(2, 1, 0)
     g.add_undirected_edge(2, 3, 0)
     g.add_undirected_edge(3, 4, 0)
     g.add_undirected_edge(5, 3, 0)
     g.add_undirected_edge(2, 6, 0)
     g.add_undirected_edge(6, 7, 0)
     g.add_undirected_edge(6, 8, 0)
     centers = IsomorphicTrees.get_tree_centers(g)
     self.assertCountEqual(centers, [2])
コード例 #3
0
 def test_isomorphic_trees_03(self):
     g = Graph(9)
     g.add_undirected_edge(0, 1, 0)
     g.add_undirected_edge(2, 1, 0)
     g.add_undirected_edge(2, 3, 0)
     g.add_undirected_edge(3, 4, 0)
     g.add_undirected_edge(5, 3, 0)
     g.add_undirected_edge(2, 6, 0)
     g.add_undirected_edge(6, 7, 0)
     g.add_undirected_edge(6, 8, 0)
     root_tree = IsomorphicTrees.root_tree(g, 6)
     keys = [c.key for c in root_tree.get_children()]
     self.assertEqual(root_tree.key, 6)
     self.assertIsNone(root_tree.parent)
     self.assertCountEqual(keys, [2, 7, 8])
コード例 #4
0
 def setUp(self):
   self.g = Graph(13)
   self.g.add_undirected_edge(0, 7, 1)
   self.g.add_undirected_edge(0, 9, 1)
   self.g.add_undirected_edge(0, 11, 1)
   self.g.add_undirected_edge(7, 11, 1)
   self.g.add_undirected_edge(7, 6, 1)
   self.g.add_undirected_edge(7, 3, 1)
   self.g.add_undirected_edge(6, 5, 1)
   self.g.add_undirected_edge(3, 4, 1)
   self.g.add_undirected_edge(2, 3, 1)
   self.g.add_undirected_edge(2, 12, 1)
   self.g.add_undirected_edge(12, 8, 1)
   self.g.add_undirected_edge(8, 1, 1)
   self.g.add_undirected_edge(1, 10, 1)
   self.g.add_undirected_edge(10, 9, 1)
   self.g.add_undirected_edge(9, 8, 1)
コード例 #5
0
 def test_isomorphic_trees_02(self):
     g = Graph(7)
     g.add_undirected_edge(0, 1, 0)
     g.add_undirected_edge(1, 2, 0)
     g.add_undirected_edge(2, 3, 0)
     g.add_undirected_edge(3, 4, 0)
     g.add_undirected_edge(4, 5, 0)
     g.add_undirected_edge(4, 6, 0)
     centers = IsomorphicTrees.get_tree_centers(g)
     self.assertCountEqual(centers, [2, 3])
コード例 #6
0
ファイル: test_mst.py プロジェクト: PancakeCard/mst
    def setUp(self):
        self.g = Graph()
        self.g.add_connected_vertice(0, 0)
        self.g.add_connected_vertice(3, 4)
        self.g.add_connected_vertice(0, 4)
        self.g.add_connected_vertice(3, 0)
        self.g.add_connected_vertice(10, 40)

        self.mst = [[
            Vertice(0, 0),
            Vertice(0, 4),
            Vertice(3, 0),
            Vertice(3, 4),
            Vertice(10, 40),
        ]]

        self.three_groups = [
            [Vertice(0, 0), Vertice(3, 0)],
            [Vertice(3, 4), Vertice(0, 4)],
            [Vertice(10, 40)],
        ]
コード例 #7
0
ファイル: interface.py プロジェクト: reibelj/480CodingProject
def main():
    whichType = int(
        input(
            "Do you want to find optimal travel path? (1) or all travel paths? (2)\n"
        ))
    print(
        " Destination options include: Buffalo, Erie, Harrisburgh, Meadville, NewYorkCity,  Pittsburgh,  Philadelphia, StateCollege, and WashingtonDC "
    )
    if (whichType == 1):
        source = str(input("Enter source (Starting Destination): "))
        destination = str(input("Enter destination (Ending Destination): "))

        map_of_cities = Graph()
        map_of_cities.makeGraphFromData('data')

        path_shortest = Dijkstra(map_of_cities, source.lower(),
                                 destination.lower())

        print("Here are the travel instructions for the optimal path \n\n")

        display_all_paths(path_shortest, destination.lower())

        plot(map_of_cities, path_shortest, destination.lower())
    elif (whichType == 2):

        budget = float(input("Enter a budget in $: "))

        time_taken = float(input("Enter the time taken in hours: "))

        source = str(input("Enter source : "))

        destination = str(input("Enter destination: "))

        map_of_cities = Graph()
        map_of_cities.makeGraphFromData('data')

        paths = find_all_paths(map_of_cities, source.lower(),
                               destination.lower(), time_taken, budget)

        plot(map_of_cities, paths, destination.lower())

        print("Here are the travel instructions")

        display_all_paths(paths, destination.lower())
    else:
        print("WRONG OPTION!")
コード例 #8
0
ファイル: test_mst.py プロジェクト: PancakeCard/mst
class TestMinimumSpanningTree(unittest.TestCase):
    def setUp(self):
        self.g = Graph()
        self.g.add_connected_vertice(0, 0)
        self.g.add_connected_vertice(3, 4)
        self.g.add_connected_vertice(0, 4)
        self.g.add_connected_vertice(3, 0)
        self.g.add_connected_vertice(10, 40)

        self.mst = [[
            Vertice(0, 0),
            Vertice(0, 4),
            Vertice(3, 0),
            Vertice(3, 4),
            Vertice(10, 40),
        ]]

        self.three_groups = [
            [Vertice(0, 0), Vertice(3, 0)],
            [Vertice(3, 4), Vertice(0, 4)],
            [Vertice(10, 40)],
        ]

    def test_kruskal(self):
        mst = kruskal(self.g)
        self.assertGroupsEqual(mst, self.mst)

    def test_kruskal_groups(self):
        three_groups = kruskal(self.g, 3)
        self.assertGroupsEqual(three_groups, self.three_groups)

    def test_prim(self):
        mst = prim(self.g)
        self.assertGroupsEqual(mst, self.mst)

    def test_prim_groups(self):
        three_groups = prim(self.g, 3)
        self.assertGroupsEqual(three_groups, self.three_groups)

    def assertGroupsEqual(self, first, second, msg=None):
        try:
            key = lambda x: len(x)
            first.sort(key=key)
            second.sort(key=key)

            self.assertEqual(len(first), len(second))
            for i, group in enumerate(first):
                self.assertEqual(len(group), len(second[i]))
                for item in group:
                    self.assertIn(item, second[i])
        except AssertionError:
            msg = "Groups not equal\n\n{}\n{}".format(first, second)
            raise AssertionError(msg)
コード例 #9
0
class DFSGraphTest(unittest.TestCase):
    def setUp(self):
        self.g = Graph(5)
        self.g.add_edge(0, 1, 4)
        self.g.add_edge(0, 2, 1)
        self.g.add_edge(2, 1, 2)
        self.g.add_edge(1, 3, 1)
        self.g.add_edge(2, 3, 5)
        self.g.add_edge(3, 4, 3)

    def test_dfs_00(self):
        self.assertEqual(dfs_graph.dfs_recursive(self.g), self.g.size)

    def test_dfs_01(self):
        self.assertEqual(dfs_graph.dfs_iterative(self.g), self.g.size)
コード例 #10
0
class TopSortTest(unittest.TestCase):
    def setUp(self):
        self.g = Graph(5)
        self.g.add_edge(0, 1, 4)
        self.g.add_edge(0, 2, 1)
        self.g.add_edge(2, 1, 2)
        self.g.add_edge(1, 3, 1)
        self.g.add_edge(2, 3, 5)
        self.g.add_edge(3, 4, 3)

    def test_dijkstra_00(self):
        dist, prev = dijkstra.dijkstra(self.g, 0, 4)
        self.assertEqual(dist, 7)
        self.assertEqual(prev, [None, 2, 0, 1, 3])

    def test_dijkstra_01(self):
        path = dijkstra.reconstruct_shortest_path(self.g, 0, 4)
        self.assertEqual(path, [0, 2, 1, 3, 4])
コード例 #11
0
ファイル: test_graph.py プロジェクト: PancakeCard/mst
 def setUp(self):
     self.graph = Graph()
コード例 #12
0
# Test case to determine if all of the paths are determined correctly
from adt.graph import Graph
from algorithm.algorithms import *
from plot.plot import *
from display.display import *

map_of_cities = Graph()
map_of_cities.makeGraphFromData('data')

path = find_all_paths(map_of_cities,'mead','nyc',8,250)
print path


display_all_paths(path,'nyc')
コード例 #13
0
ファイル: test_graph.py プロジェクト: PancakeCard/mst
class TestGraph(unittest.TestCase):
    def setUp(self):
        self.graph = Graph()

    def test_add_connected_vertice(self):
        vertices = []
        edges = []
        self.assertEqual(self.graph.edges, edges)
        self.assertEqual(self.graph.vertices, vertices)

        self.graph.add_connected_vertice(0, 0)
        vertices.append(Vertice(0, 0))
        self.assertEqual(self.graph.edges, edges)
        self.assertEqual(self.graph.vertices, vertices)

        self.graph.add_connected_vertice(3, 4)
        vertices.append(Vertice(3, 4))
        edges.append(Edge(vertices[0], vertices[1]))
        self.assertEqual(self.graph.edges, edges)

        self.graph.add_connected_vertice(0, 4)
        vertices.append(Vertice(0, 4))
        edges.append(Edge(vertices[0], vertices[2]))
        edges.append(Edge(vertices[1], vertices[2]))
        self.assertEqual(self.graph.edges, edges)
        self.assertEqual(self.graph.vertices, vertices)

    def test_repr(self):
        self.graph.add_connected_vertice(3, 4)
        self.assertEqual(str(self.graph), repr(self.graph))

    def test_graphviz(self):
        self.graph.add_connected_vertice(0, 0)
        self.graph.add_connected_vertice(3, 4)
        self.graph.add_connected_vertice(0, 4)
        self.graph.edges[-1].mst = True
        self.graph.add_connected_vertice(3, 0)
        graphviz_res = """
graph { "(0, 0)" -- "(3, 4)"[label=5.0,len=2.3219];
"(0, 0)" -- "(0, 4)"[label=4.0,len=2.0000];
"(3, 4)" -- "(0, 4)"[label=3.0,len=1.5850,color=red,penwidth=2.0];
"(0, 0)" -- "(3, 0)"[label=3.0,len=1.5850];
"(3, 4)" -- "(3, 0)"[label=4.0,len=2.0000];
"(0, 4)" -- "(3, 0)"[label=5.0,len=2.3219]; }""".strip()

        print('-' * 80)
        print(graphviz_res)
        print('-' * 80)
        print(self.graph.to_graphviz())
        print('-' * 80)

        assert_equal(self.graph.to_graphviz(), graphviz_res)

    def test_vertice_index(self):
        self.graph.add_connected_vertice(0, 0)
        vertice = self.graph.vertices[-1]
        self.assertEqual(self.graph.index(vertice), 0)

        self.graph.add_connected_vertice(3, 4)
        vertice = self.graph.vertices[-1]
        self.assertEqual(self.graph.index(vertice), 1)

        self.graph.add_connected_vertice(0, 4)
        vertice = self.graph.vertices[-1]
        self.assertEqual(self.graph.index(vertice), 2)
コード例 #14
0
 def test_isomorphic_trees_01(self):
     g = Graph(2)
     g.add_undirected_edge(0, 1, 0)
     centers = IsomorphicTrees.get_tree_centers(g)
     self.assertCountEqual(centers, [0, 1])
コード例 #15
0
 def test_isomorphic_trees_04(self):
     g1 = Graph(5)
     g2 = Graph(5)
     g1.add_undirected_edge(2, 0, 0)
     g1.add_undirected_edge(3, 4, 0)
     g1.add_undirected_edge(2, 1, 0)
     g1.add_undirected_edge(2, 3, 0)
     g2.add_undirected_edge(1, 0, 0)
     g2.add_undirected_edge(2, 4, 0)
     g2.add_undirected_edge(1, 3, 0)
     g2.add_undirected_edge(1, 2, 0)
     self.assertEqual(IsomorphicTrees.isomorphic_equal(g1, g2), True)
コード例 #16
0
    def test_isomorphic_trees_05(self):
        g = Graph(10)
        g.add_undirected_edge(0, 2, 0)
        g.add_undirected_edge(0, 1, 0)
        g.add_undirected_edge(0, 3, 0)
        g.add_undirected_edge(2, 6, 0)
        g.add_undirected_edge(2, 7, 0)
        g.add_undirected_edge(1, 4, 0)
        g.add_undirected_edge(1, 5, 0)
        g.add_undirected_edge(5, 9, 0)
        g.add_undirected_edge(3, 8, 0)

        root0 = IsomorphicTrees.root_tree(g, 0)
        self.assertEqual(IsomorphicTrees._encode(root0),
                         "(((())())(()())(()))")
コード例 #17
0
class BFSGraphTest(unittest.TestCase):

  def setUp(self):
    self.g = Graph(13)
    self.g.add_undirected_edge(0, 7, 1)
    self.g.add_undirected_edge(0, 9, 1)
    self.g.add_undirected_edge(0, 11, 1)
    self.g.add_undirected_edge(7, 11, 1)
    self.g.add_undirected_edge(7, 6, 1)
    self.g.add_undirected_edge(7, 3, 1)
    self.g.add_undirected_edge(6, 5, 1)
    self.g.add_undirected_edge(3, 4, 1)
    self.g.add_undirected_edge(2, 3, 1)
    self.g.add_undirected_edge(2, 12, 1)
    self.g.add_undirected_edge(12, 8, 1)
    self.g.add_undirected_edge(8, 1, 1)
    self.g.add_undirected_edge(1, 10, 1)
    self.g.add_undirected_edge(10, 9, 1)
    self.g.add_undirected_edge(9, 8, 1)

  def test_bfs_00(self):
    path = bfs_graph.bfs_path(self.g, start=10, end=5)
    self.assertEqual(path, [10, 9, 0, 7, 6, 5])