* test module'u yaz graph icin
* bayagi bir hata gider calisiyor mu belli degil daha topo. sort
This commit is contained in:
+21
-21
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
Reference in New Issue
Block a user