* test module'u yaz graph icin

* bayagi bir hata gider calisiyor mu belli degil daha topo. sort
This commit is contained in:
Eray Özkural
2005-07-18 12:46:17 +00:00
parent 9ab60a2929
commit 6450349f76
2 changed files with 41 additions and 21 deletions
+21 -21
View File
@@ -20,47 +20,47 @@ class digraph(object):
l.append( (u,v) ) l.append( (u,v) )
return l return l
def from_edge_list(self, el): def from_list(self, el):
"convert a list of edges (u,v) to graph" "convert a list of edges (u,v) to graph"
for (u,v) in el: for (u,v) in el:
self.add_edge(u,v) self.add_edge(u,v)
def add_vertex(u, data = None): def add_vertex(self, u, data = None):
"add vertex u, optionally with data" "add vertex u, optionally with data"
assert not u in self.__v assert not u in self.__v
self.__v.add(u) self.__v.add(u)
self.__adj[u] = set() self.__adj[u] = set()
if data!=None: if data:
self.__vdata[u] = data self.__vdata[u] = data
def add_edge(u, v, edata = None): def add_edge(self, u, v, edata = None):
"add edge u -> v" "add edge u -> v"
if not u in self.__v: if not u in self.__v:
add_vertex(u) self.add_vertex(u)
if not v in self.__v: if not v in self.__v:
add_vertex(v) self.add_vertex(v)
self.__adj[u].add(v) self.__adj[u].add(v)
#if edata != None: #if edata != None:
def set_vertex_data(u, data): def set_vertex_data(self, u, data):
self.__vdata[u] = data self.__vdata[u] = data
def vertex_data(u): def vertex_data(self, u):
return self.__vdata[u] return self.__vdata[u]
def has_vertex(u): def has_vertex(self, u):
return u in self.__v return u in self.__v
def has_edge(u,v): def has_edge(self, u,v):
if u in self.__v: if u in self.__v:
return v in self.__adj[u] return v in self.__adj[u]
else: else:
return False return False
def adj(u): def adj(self, u):
return self.__adj[u] return self.__adj[u]
def dfs(finish_hook = None): def dfs(self, finish_hook = None):
self.color = {} self.color = {}
self.p = {} self.p = {}
self.d = {} self.d = {}
@@ -70,23 +70,23 @@ class digraph(object):
self.p[u] = None self.p[u] = None
self.time = 0 self.time = 0
for u in self.__v: for u in self.__v:
if color[u] = 'w': if self.color[u] == 'w':
dfs_visit(u) self.dfs_visit(u, finish_hook)
def dfs_visit(u, finish_hook): def dfs_visit(self, u, finish_hook):
self.color[u] = 'g' self.color[u] = 'g'
self.d[u] = self.time = self.time + 1 self.d[u] = self.time = self.time + 1
for v in self.adj(u): for v in self.adj(u):
if self.color[v] = 'w': if self.color[v] == 'w':
self.p[v] = u self.p[v] = u
dfs_visit(v) self.dfs_visit(v, finish_hook)
self.color[u] = black self.color[u] = 'b'
if finish_hook != None: if finish_hook:
finish_hook(u) finish_hook(u)
self.f[u] = self.time = self.time + 1 self.f[u] = self.time = self.time + 1
def topological_sort(): def topological_sort(self):
l = [] l = []
dfs(lambda u: l.append(u)) self.dfs(lambda u: l.append(u))
return l return l
+20
View File
@@ -0,0 +1,20 @@
import unittest
import os
from pisi import graph
from pisi.config import config
class GraphTestCase(unittest.TestCase):
def setUp(self):
g0 = graph.digraph()
g0.from_list([ (1,2), (1,3), (2,3), (3,4), (4, 5), (4,1)])
g1 = graph.digraph()
g1.from_list([ (0,2), (0,3), (3,4), (2,4), (5,4) ])
self.g1 = g1
def testTopologicalSort(self):
print self.g1.topological_sort()
suite = unittest.makeSuite(GraphTestCase)