예제 #1
0
파일: e018.py 프로젝트: correl/euler
 def find_path(self):
     """Implementation of Dijkstra's algorithm"""
     
     # Reset vertice info
     for v in self.vertices:
         v.min_distance = float('+inf')
         v.previous_vertex = None
     orig = Vertex(100)
     orig.min_distance = 0
     adjacent = self.vertices[triangle(self.rows - 1):]
     for a in adjacent:
         orig.add_adjacent(a)
     Q = [orig] + [v for v in self.vertices]
     while len(Q) > 0:
         u = min(Q)
         if u.min_distance == float('+inf'):
             return False
         Q.remove(u)
         for v in u.adjacent:
             distance = u.min_distance + v.weight
             if distance < v.min_distance:
                 v.min_distance = distance
                 v.previous_vertex = u
     return True
예제 #2
0
파일: e018.py 프로젝트: correl/euler
    def find_path(self):
        """Implementation of Dijkstra's algorithm"""

        # Reset vertice info
        for v in self.vertices:
            v.min_distance = float('+inf')
            v.previous_vertex = None
        orig = Vertex(100)
        orig.min_distance = 0
        adjacent = self.vertices[triangle(self.rows - 1):]
        for a in adjacent:
            orig.add_adjacent(a)
        Q = [orig] + [v for v in self.vertices]
        while len(Q) > 0:
            u = min(Q)
            if u.min_distance == float('+inf'):
                return False
            Q.remove(u)
            for v in u.adjacent:
                distance = u.min_distance + v.weight
                if distance < v.min_distance:
                    v.min_distance = distance
                    v.previous_vertex = u
        return True
예제 #3
0
파일: e018.py 프로젝트: correl/euler
 def __init__(self, vertex_data):
     self.vertices = []
     i = 0
     row = 1
     for v in vertex_data:
         if (i >= triangle(row)):
             row = row + 1
         vertex = Vertex(v)
         if row > 1:
             # Find upwards adjacent vertices
             above_row = self.vertices[triangle(row - 2):triangle(row - 1)]
             total_this_row = triangle(row) - triangle(row - 1)
             pos = i - triangle(row - 1)  + 1
             start = int((pos / float(total_this_row)) * len(above_row)) - 1
             end = int(((pos + 1) / float(total_this_row)) * len(above_row))
             adjacent = above_row[start if start >= 0 else 0:end]
             for a in adjacent:
                 vertex.add_adjacent(a)
         self.vertices.append(vertex)
         i = i + 1
     self.rows = row
     if len(self.vertices) != triangle(self.rows):
         raise Exception('Invalid vertex set')
예제 #4
0
파일: e018.py 프로젝트: correl/euler
 def __init__(self, vertex_data):
     self.vertices = []
     i = 0
     row = 1
     for v in vertex_data:
         if (i >= triangle(row)):
             row = row + 1
         vertex = Vertex(v)
         if row > 1:
             # Find upwards adjacent vertices
             above_row = self.vertices[triangle(row - 2):triangle(row - 1)]
             total_this_row = triangle(row) - triangle(row - 1)
             pos = i - triangle(row - 1) + 1
             start = int((pos / float(total_this_row)) * len(above_row)) - 1
             end = int(((pos + 1) / float(total_this_row)) * len(above_row))
             adjacent = above_row[start if start >= 0 else 0:end]
             for a in adjacent:
                 vertex.add_adjacent(a)
         self.vertices.append(vertex)
         i = i + 1
     self.rows = row
     if len(self.vertices) != triangle(self.rows):
         raise Exception('Invalid vertex set')