From ec79bb5e6fee2e5d05b845f882e0991d92dfa539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 18 Jul 2005 00:42:49 +0000 Subject: [PATCH] * gereken bir graph class'ini yazmaya basladim. python'cularin yaptigi bir iki sey vardi ama bundan daha hizli/iyi degil. iki tanesi de calismadi ben de onlari fix edecegime iki sayfa code yazarim dedim. --- pisi/graph.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 pisi/graph.py diff --git a/pisi/graph.py b/pisi/graph.py new file mode 100644 index 00000000..30d3cf19 --- /dev/null +++ b/pisi/graph.py @@ -0,0 +1,68 @@ +# the most simple minded digraph class ever + +class digraph(object): + + def __init__(self): + self.__v = set() + self.__adj = {} + self.__vdata = {} + #self.__edata = {} + + def add_vertex(u, data = None): + assert not u in self.__v + self.__v.add(u) + if data!=None: + self.__vdata[u] = data + + def add_edge(u, v, edata = None): + self.__adj[u].add(u) + #if edata != None: + + def set_vertex_data(u, data): + self.__vdata[u] = data + + def vertex_data(u): + self.__vdata[u] + + def has_vertex(u): + return u in self.__v + + def has_edge(u,v): + if u in self.__v: + return v in self.__adj[u] + else: + return False + + def adj(u): + return self.__adj[u] + + def dfs(finish_hook = None): + self.color = {} + self.p = {} + self.d = {} + self.f = {} + for u in self.__v: + self.color[u] = 'w' + self.p[u] = None + self.time = 0 + for u in self.__v: + if color[u] = 'w': + dfs_visit(u) + + def dfs_visit(u, finish_hook): + self.color[u] = 'g' + self.d[u] = self.time = self.time + 1 + for v in self.adj(u): + if self.color[v] = 'w': + self.p[v] = u + dfs_visit(v) + self.color[u] = black + if finish_hook != None: + finish_hook(u) + self.f[u] = self.time = self.time + 1 + + def topological_sort(): + l = [] + dfs(lambda u: l.append(u)) + return l +