Floyd–Warshall

15 April 2010

It was 2am and I had an exercice where I had to do a Floyd–Warshall algorithm over a graph to get the maximum cost among the minimum paths. The numbers on the paper began to blur and I found it way easier to copy the pseudocode from Wikipedia and translate into Python than to actually do it. Am I awesome? Is there something wrong with me?

Here you are.

#n = num of vertices
n = 7
#this is my little aproximation to infinity... didn't want to get into the docs
m = 1e1000
#this is the matrix that describes de graph
path = [[0,4,3,m,m,m,m],[4,0,4,6,m,6,m],[3,4,0,6,m,m,m],[m,6,6,0,4,4,6],[m,m,m,4,0,6,10],[m,6,m,4,6,0,2],[m,m,m,6,10,2,0]]
for k in xrange(n):
	for i in xrange(n):
		for j in xrange(n):
			path[i][j] = min ( path[i][j], path[i][k]+path[k][j] )
			print path

Havel-Hakimi

19 February 2010

Avui a classe han presentat l’algorisme Havel-Hakimi per a validar i dibuixar grafs. Després han posat una sèrie d’exercicis i com que no em venia de gust fer-los he buscat una implentació de l’algorisme per internet, i al no trobar-la la he fet jo, a més, et mostra els passos intermitjos per a poder copiar-ho a la pràctica. Aqui la teniu. A veure si aquest cap de setmana puc acabar-ho perquè en calculi les alternatives i ho dibuixi.

def comprova(nodes):
    if sum(nodes) % 2 != 0:
      print 'la suma se graus no es parell'
      return 0
    if max(nodes) > len(nodes)-1:
      print 'hi ha un node de grau mes gran que el total de nodes'
      return 0
    if min(nodes) < 0:
      print 'hi ha un node de grau negatiu'
      return 0
    if max(nodes) == 0:
      print 'es un graf correcte'
      return 0
    return 1

# mostra de Butà un hidrocarbó amb fórmula C4H10
nodes = [4,4,4,4,1,1,1,1,1,1,1,1,1,1]
# mostra d'una definició de graf incorrecte
# nodes = [6,5,5,5,5,2,1,1]

while (comprova(nodes)):
  print nodes
  nodes2 = list(nodes)
  nodes.sort()
  nodes.reverse()
  if nodes!=nodes2: print str(nodes) + " ordenat"
  node = nodes.pop(0)
  for i in range(node):
    nodes[i]=nodes[i]-1
print nodes
def comprova(nodes):
if sum(nodes) % 2 != 0:
print ‘la suma se graus no es parell’
return 0
if max(nodes) > len(nodes)-1:
print ‘hi ha un node de grau mes gran que el total de nodes’
return 0
if min(nodes) < 0:
print ‘hi ha un node de grau negatiu’
return 0
if max(nodes) == 0:
print ‘es un graf correcte’
return 0
return 1

nodes = [7,5,4,3,2,2,2]
nodes = [7,6,5,4,4,3,2,1]
nodes = [5,5,3,2,2,1,1]
nodes = [4,3,2,2,2,2,1]
nodes = [6,5,5,5,5,2,1,1]
nodes = [4,4,4,4,1,1,1,1,1,1,1,1,1,1]
while (comprova(nodes)):
print nodes
nodes2 = list(nodes)
nodes.sort()
nodes.reverse()
if nodes!=nodes2: print str(nodes) + ” ordenat”
node = nodes.pop(0)
for i in range(node):
nodes[i]=nodes[i]-1
print nodes

El laberint del Minotaure

04 February 2010

El laberint del Minotaure en Python.

Minotaure

Llegeix la resta de l’entrada »