Devo implementare, in Lisp, un algoritmo di ricerca di profondità in un grafico implicito (cioè un grafico in cui ho il nodo di partenza, il nodo obiettivo e la funzione successore, f, che danno a un nodo la creazione dei suoi successori). C'è un limite di profondità d. L'algoritmo deve restituire un percorso (ovviamente non può essere minimo).
Il mio problema è come gestire il loop.
La mia prima domanda è: se utilizzo questo seguente metodo stupido, lo lavoro?
Ho 2 lista. Il primo è un LIFO ((lo chiamo list1) quando inserisco nella testa i nodi succesor.Evry time espongo il nodo nella testa.
Nel secondo elenco (lo chiamo list2) tengo una lista in cui tutti i nodi sono già stati soddisfatti e ogni volta che espongo un nodo, controllo se i nodi successori ottenuti sono nella lista sopra (lista2). Per i nodi che ci sono dentro (in list2) non li inserisco in list1.
Questo metodo fa schifo perché nel peggiore dei casi devo tenere in lista 2 tutti i nodi del grafico e devo cercare ad ogni espansione se alcuni nodi successivi sono nella lista2. (ad esempio, questo metodo funziona sicuramente con la ricerca in ampiezza) Ma almeno funziona? O rischierei di tagliare percorsi rilevanti?
La seconda domanda è: Come posso implementarlo in modo efficiente (pseudocodice, o semplicemente idea)?
Grazie in anticipo