Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Class method returns None

I did a few modifications to the Bellman-Ford to get some data I need to compare but I can’t seem to be able to get some of the information I need from the return the PrintArr method, while it prints the ‘dist_list’ the return won’t take it nor am I being able to create the object using list comprehension either.

Class Graph:

def __init__(self, vertices):
    self.V = vertices
    self.graph = []

def addEdge(self, u, v, w):
    self.graph.append([u, v, w])
     
def printArr(self, dist, src):
    #print("Source  End     Distance")
    dist_list = []
    for i in range(self.V):
        #print("{0}\t{1}\t{2}".format(src, i, dist[i]))
        #print(src, i, dist[i])
        dist_list.append([src, i, dist[i]])
    print(dist_list)
    print(dist_list == [[src, i, dist[i]] for i in range(self.V)])
    return [[src, i, dist[i]] for i in range(self.V)]

 
def BellmanFord(self, src):

    dist = [float("Inf")] * self.V
    dist[src] = 0

    for _ in range(self.V - 1):
        for u, v, w in self.graph:
            if dist[u] != float("Inf") and dist[u] + w < dist[v]:
                    dist[v] = dist[u] + w

    for u, v, w in self.graph:
        if dist[u] != float("Inf") and dist[u] + w < dist[v]:
            print("Graph contains negative weight cycle")
            return
                     
    self.printArr(dist, src)


matrix = [[0, 2, 2, 2, -1], [9, 0, 2, 2, -1], [9, 3, 0, 2, -1], [9, 3, 2, 0, -1], [9, 3, 2, 2, 0]]

g = Graph(len(matrix))


[[g.addEdge(i, j, element) for j, element in enumerate(array) if i != j] for i, array in enumerate(matrix)]

print(g.BellmanFord(0))

Output:

[[0, 0, 0], [0, 1, 2], [0, 2, 1], [0, 3, 1], [0, 4, -1]]

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

True

None

Print: OK

List A = List B

Why return None??? What am I missing?

>Solution :

The None comes from:

print(g.BellmanFord(0))

BellmanFord never returns anything useful under any circumstances (it either falls off the end and implicitly returns None, or executes a plain return, which also return None). Remove the print() around the call, and you’ll avoid the None output.

Alternatively, change self.printArr(dist, src) to return self.printArr(dist, src) so it does return something useful (assuming the early return, which should probably be raising an exception rather than silently returning None, isn’t invoked).

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading