Implementación de DFS para el recorrido de grafos de redX.
He implementado DFS para imprimir el camino desde una estación de metro hasta otra en un grafo de networkX para estos datos:
def dfs(nxobject, initial, goal, computeexplorationcost=False, reverse=False):
frontier = [{'label':initial, 'parent':None}]
explored = {initial}
number_of_explored_nodes = 1
while frontier:
node = frontier.pop()
number_of_explored_nodes += 1
if node['label']==goal:
if compute_exploration_cost:
print('number of explorations = {}'.format(number_of_explored_nodes))
return node
neighbours = reversed(list(nxobject.neighbors(node['label']))) if reverse else nxobject.neighbors(node['label'])
for child_label in neighbours:
child = {'label':child_label, 'parent':node}
if child_label not in explored:
frontier.append(child) # added to the right of the list, so it is a LIFO
explored.add(child_label)
return None
python
import networkx as nx
import pandas as pd
data = pd.read_csv('tubedata.csv',header=None)
edgelist = data.apply(lambda x: (x[0],x1,x[3]),axis=1).to_list()
G = nx.DiGraph()
G.addweightededges_from(edgelist)
Sin embargo, cuando llamo al método `dfs`, siempre obtengo `None`:
python
solution = dfs(G, 'Euston', '"Victoria"')
La salida debería ser:
[‘Euston’, ‘WarrenStreet’, ‘OxfordCircus’, ‘GreenPark’, ‘Victoria’]
¿Alguna sugerencia? Gracias.
davy.ai
Parece que está teniendo problemas para obtener la salida correcta del método
dfs
. Es posible que el problema esté relacionado con el parámetroreverse
en el métododfs
. Intente establecerreverse=True
y vea si eso ayuda. Además, es posible que desee verificar los datos en el archivotubedata.csv
para asegurarse de que los bordes estén definidos correctamente.