Designing a graph study program

andrea kerny404 at gmail.com
Tue May 8 06:22:33 EDT 2007


I'm studying some graphs algorithm (minumum spanning tree, breath
search first topological sort etc etc...) and to understand better the
theory I'm implementing them with python...

I made my own graph class, the constructor is simply this:
class graph:
	"in forma di matrice e' una matrice normale, in forma di lista uso un
dizionario"
	def __init__(self,nodes,edges,dir=False,weight=[]): # inizializzatore
dell'oggetto, di default in forma di lista di adiacenza e undirected
													# il grafo puo' essere anche pesato
		"di default uso la lista di adiacenza per rappresentare il grafo,
usare set"
		self.adj_list = {}
		self.nodes = nodes
		self.edges = edges # in modo da avere comodi questi dati, se
bidirezionale non ci sono tutti
		self.weight = weight
		self.dir = dir # anche questo deve essere raggiungibile
		for n in nodes:
			self.adj_list[n] = []
 		for n in nodes:
			for e in edges:
				if dir: # se ho la direzione guardo l'ordine dei vertici nel lato
					if n == e[0]:
						self.adj_list[n].append(e[1])
				elif n in e:
					other = e[((e.index(n))+1) % 2]
					self.adj_list[n].append(other)
		if weight:
			self.w = {}
			for idx in range(len(edges)):
				self.w[edges[idx]] = weight[idx] # assegno in corrispondenza

Well then I wanted to draw graphs and I found that pydot is working
really nicely.
BUT I'd like to do this, an interactive program to see ho the
algorithms works...
For example in the breath search first, every time the algorithm
colors a node, the program should redraw the graphs. Which modules
should I use for graphics (I use macosX and I'd like something cross
platforms).

Now I'm doing something like this

	def draw_graph(self):
		"""disegna un grafo con pydot"""
		import os
		output = 'graph.png'
		self.dot_graph.write_png(output)
		com = 'open '+output
		os.popen(com)

which I think is very ugly and not fitting very well for my purpose.

I also created a class to represent matrix (for the matrix view of the
graph) but I found that numpy has a very complete implementation, I
think I'll go with it.

Thank you very much, if you have any kind of suggestions/links please
write it :)




More information about the Python-list mailing list