[SP-pm] Distância entre nós em um grafo
Carlos Costa
crncosta at gmail.com
Fri Sep 20 09:14:11 PDT 2013
Oi Blabos,
Não use cpan pra um problema simples, grafos são facilmente representados
como Adjacency Lists ( http://en.wikipedia.org/wiki/Adjacency_list ) em
Perl: basicamente uma hash table onde cada vertex aponta para uma lista de
vertices adjacentes.
Aqui tem uma explicação bem elegante (e traduzível pra Perl)
http://www.python.org/doc/essays/graphs/
Basicamente o grafo:
A -> B
A -> C
B -> C
B -> D
C -> D
D -> C
E -> F
F -> C
Vai virar algo assim:
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
Depois é so criar uma função que encontre o caminho entre dois nós:
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if not graph.has_key(start):
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
E rodar o código:
>>> find_path(graph, 'A', 'D')
['A', 'B', 'C', 'D']
O tamanho do array retornado por find_path() vai ser o número que você
procura.
( )s
Carlos.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130920/2d39d6b6/attachment.html>
More information about the SaoPaulo-pm
mailing list