print(str(i)+"\t:",end="") for j in range(len(self.g[i])): print("\t"+str(self.g[i][j]),end="") print() class adjIterator: def __init__(self,graph,v): self.graph=graph self.v=v self.index=0 def next(self): temp=self.graph.g[self.v][self.index] self.index+=1 return temp def end(self): return self.index>=len(self.graph.g[self.v]) # sparseGraph=SparseGraph(100,False) # edge=100 # for i in range(edge): # sparseGraph.addEdge(random.randint(0,99),random.randint(0,99)) # for i in range(sparseGraph.pointer()): # ite=SparseGraph.adjIterator(sparseGraph,i) # print("pointer\t" + str(i) + "\tedge:", end="") # while not ite.end(): # # print(str(ite.next())+"\t",end="") # print() if __name__=="__main__": g1=ReadGraph().readSparseGraph('testG1.txt') g1.show()
def hasEdge(self,v,w): assert v>=0 and v<self.n assert w>=0 and w<self.n return self.g[v][w] def show(self): for i in range(self.pointer()): print(str(i)+"\t:",end="") for j in range(len(self.g[i])): print("\t"+str(self.g[i][j]),end="") print() class adjIterator: def __init__(self,graph,v): self.graph=graph self.v=v self.index=0 def next(self): for i in range(self.index,self.graph.pointer()): if self.graph.g[self.v][i]: temp=self.index self.index+=1 return temp else: self.index += 1 def end(self): return self.index>=self.graph.pointer() if __name__=="__main__": dense=ReadGraph().readDenseGraph("testG1.txt") dense.show()
while len(stack): vec.append(stack.pop(len(stack) - 1)) def showPath(self, w): vec = [] self.shortestPath(w, vec) for i in range(len(vec)): if i == len(vec) - 1: print(str(vec[i].v()) + "--->" + str(vec[i].w())) else: print(str(vec[i].v()) + "--->", end="") if __name__ == "__main__": # g1 = ReadGraph().readWidthSparseGraph('testG2_negative_circle.txt') g1 = ReadGraph().readWidthSparseGraph('testG2.txt') bellmanFord = BellmanFord(g1, 0) bellmanFord.bellManFord() if bellmanFord.hasNegativeCycle(): print("has negative cycle") else: bellmanFord.showPath(2) bellmanFord = BellmanFord(g1, 0) bellmanFord.bellManFord() if bellmanFord.hasNegativeCycle(): print("has negative cycle") else: bellmanFord.showPath(1) bellmanFord = BellmanFord(g1, 0) bellmanFord.bellManFord() if bellmanFord.hasNegativeCycle():
for i in range(self.graph.pointer()): if not self.visited[i]: self.dfs(i) self.count += 1 def dfs(self, v): self.visited[v] = True self.id[v] = self.count iter = self.graph.adjIterator(self.graph, v) while not iter.end(): node = iter.next() if not self.visited[node]: self.dfs(node) def size(self): return self.count def isConnect(self, v, w): assert v >= 0 and v < self.graph.pointer() assert w >= 0 and w < self.graph.pointer() return self.id[v] == self.id[w] g1 = ReadGraph().readSparseGraph('testG1.txt') c1 = Component(g1) c1.component() print(c1.size()) g2 = ReadGraph().readSparseGraph('testG2.txt') c2 = Component(g2) c2.component() print(c2.size())