Beispiel #1
0
class GraphTest(unittest.TestCase):
    def setUp(self):
        self.g = Graph(flag_dag=True)
        self.g.add_vertex(0)
        self.g.add_vertex(1)
        self.g.add_vertex(2)
        self.g.add_edge(GraphEdge(2, 3, 1))
        self.g.add_vertex(3)
        self.g.add_edge(GraphEdge(3, 1, 1))
        self.g.add_vertex(4)
        self.g.add_edge(GraphEdge(4, 1, 1))
        self.g.add_edge(GraphEdge(4, 0, 1))
        self.g.add_vertex(5)
        self.g.add_edge(GraphEdge(5, 2, 1))
        self.g.add_edge(GraphEdge(5, 0, 1))

    def test_vertices(self):
        self.assertEqual(self.g.vertices(), [0, 1, 2, 3, 4, 5])

    def test_edges(self):
        edges = [
            GraphEdge(2, 3, 1),
            GraphEdge(3, 1, 1),
            GraphEdge(4, 1, 1),
            GraphEdge(4, 0, 1),
            GraphEdge(5, 2, 1),
            GraphEdge(5, 0, 1)
        ]
        self.assertEqual(self.g.edges(), edges)

    def test_topological_sorting(self):
        self.assertEqual(self.g.topological_sort(), deque([5, 4, 2, 3, 1, 0]))

    def tearDown(self):
        pass
class GraphTest(unittest.TestCase):

    def setUp(self):
        self.g = Graph(flag_dag=True)
        self.g.add_vertex(0)
        self.g.add_vertex(1)
        self.g.add_vertex(2)
        self.g.add_edge(GraphEdge(2, 3, 1))
        self.g.add_vertex(3)
        self.g.add_edge(GraphEdge(3, 1, 1))
        self.g.add_vertex(4)
        self.g.add_edge(GraphEdge(4, 1, 1))
        self.g.add_edge(GraphEdge(4, 0, 1))
        self.g.add_vertex(5)
        self.g.add_edge(GraphEdge(5, 2, 1))
        self.g.add_edge(GraphEdge(5, 0, 1))

    def test_vertices(self):
        self.assertEqual(self.g.vertices(), [0, 1, 2, 3, 4, 5])

    def test_edges(self):
        edges = [
            GraphEdge(2, 3, 1),
            GraphEdge(3, 1, 1),
            GraphEdge(4, 1, 1),
            GraphEdge(4, 0, 1),
            GraphEdge(5, 2, 1),
            GraphEdge(5, 0, 1)
        ]
        self.assertEqual(self.g.edges(), edges)

    def test_topological_sorting(self):
        self.assertEqual(self.g.topological_sort(), deque([5, 4, 2, 3, 1, 0]))

    def tearDown(self):
        pass
from codingame_solutions.utilities.graph import Graph


graph = Graph()

n = int(input())  # the number of relationships of influence
for i in range(n):
    # x: a relationship of influence between two people (x influences y)
    x, y = [int(j) for j in input().split()]

    graph.add_edge((x, y))

print(graph, file=sys.stderr)

vertices_pairs = itertools.permutations(graph.vertices(), 2)

paths = []
for vertices_pair in vertices_pairs:
    print("vertices_pair: " + str(vertices_pair), file=sys.stderr)
    new_paths = graph.find_all_paths(vertices_pair[0], vertices_pair[1])
    paths += new_paths

print("Paths: " + str(paths), file=sys.stderr)

longest_path_length = max([len(l) for l in paths])

# Write an action using print
# To debug: print("Debug messages...", file=sys.stderr)

# The number of people involved in the longest succession of influences
from codingame_solutions.utilities.graph import Graph


graph = Graph()

n = int(input())  # the number of relationships of influence
for i in range(n):
    # x: a relationship of influence between two people (x influences y)
    x, y = [int(j) for j in input().split()]

    graph.add_edge((x, y))

print(graph, file=sys.stderr)

vertices_pairs = itertools.permutations(graph.vertices(), 2)

paths = []
for vertices_pair in vertices_pairs:
    print("vertices_pair: " + str(vertices_pair), file=sys.stderr)
    new_paths = graph.find_all_paths(vertices_pair[0], vertices_pair[1])
    paths += new_paths

print("Paths: " + str(paths), file=sys.stderr)

longest_path_length = max([len(l) for l in paths])

# Write an action using print
# To debug: print("Debug messages...", file=sys.stderr)

# The number of people involved in the longest succession of influences