Skip to main content

Python : Graph Implementation


class Vertex:
   
    def __init__(self,node):
        self.id = node
        self.adjacent = {}
        self.distance = 99999
        self.visited = False
        self.previous = None
   
    def addNeighbour(self,neighbour,weight = 0):
        self.adjacent[neighbour] = weight
   
    def getConnections(self):
        return self.adjacent.keys()
       
    def getVertexID(self):
        return self.id
   
    def getWeight(self,neighbour):
        return self.adjacent[neighbour]
       
    def setDistance(self,dist):
        self.distance = dist
   
    def getDistance(self):
        return self.distance
       
    def setPrevious(self,prev):
        self.previous = prev
       
    def setVisited(self):
        self.visited = True
       
    def __str__(self):
        return str(self.id) + 'adjacent:' + str([x.id for x in self.adjacent])

class Graph:
    def __init__(self):
        self.vertDictionary = {}
        self.numVertices = 0
       
    def __iter__(self):
        return iter(self.vertDictionary.values())
       
    def addVertex(self,node):
        self.numVertices = self.numVertices + 1
        newVertex = Vertex(node)
        self.vertDictionary[node] = newVertex
        return newVertex
   
    def getVertex(self,n):
        if n in self.vertDictionary:
            return self.vertDictionary[n]
        else:
            return None
   
    def addEdge(self,frm,to,cost =0):
        if frm not in self.vertDictionary:
            self.addVertex(frm)
        if to not in self.vertDictionary:
            self.addVertex(to)
   
        self.vertDictionary[frm].addNeighbour(self.vertDictionary[to],cost)
        self.vertDictionary[to].addNeighbour(self.vertDictionary[frm],cost)
       
    def getVertices(self):
        return self.vertDictionary.keys()
       
    def setPrevious(self,current):
        self.previous = current
   
    def getPrevious(self,current):
        return self.previous
       
    def getEdges(self):
        edges = []
        for v in G:
            for w in v.getConnections():
                vid = v.getVertexID()
                wid = w.getVertexID()
                edges.append((vid,wid,v.getWeight(w)))
        return edges

if __name__ == '__main__':
    G = Graph()
    G.addVertex('a')
    G.addVertex('b')
    G.addVertex('c')
    G.addVertex('d')
    G.addVertex('e')
    G.addEdge('a','b',4)
    G.addEdge('a','c',1)    
    G.addEdge('c','b',2)
    G.addEdge('b','e',4)   
    G.addEdge('c','d',4)   
    G.addEdge('d','e',4)
    print'graph Data'
    print G.getEdges()

Comments

Popular posts from this blog

Pokemon Go download link

Pokemon go has become the buzz word in tech industry now. Nintendo, the Japanese video game company are the creates of this game. Its first of it kind to integrate a game with augmented reality , so people has to go out to real world with there android or iPhone to catch em all . You can download  Pokemon go  from this link. 

UNIX : How to ignore lines with certain names

Sometimes we need to ignore multiple lines with certain words and get the list out of the file. usually it will be a log file to read . The below grep command can be used to ignore multiple words present in a text file. Lets say the file contain $ cat list.txt apple orange apple banana papaya Now we need to ignore line with orange , banana and papaya . So we can use the below grep command. $ cat list.txt | grep -Ev "orange|banana|papaya" apple apple It will ignore lines with the words in -v part of grep.