Exerciții Laboratorul 4, Exercițiul 3

path/2 — drum pe un graf orientat

Fie următoarea bază de cunoștințe, formată prin intermediul predicatului connected/2 (vezi baza din editor).

  1. Scrieți un predicat path/2 care indică dacă dintr-un punct puteți să ajungeți într-un alt punct (în mai mulți pași), legând conexiunile din baza de cunoștințe. Drumurile se consideră unidirecționale (relația nu este simetrică).

    Întrebări pentru verificare:

    • Puteți ajunge din punctul 5 în punctul 10?
    • În ce puncte puteți să ajungeți plecând din 1?
    • Din ce puncte puteți să ajungeți în punctul 13?

    Testați programul pentru baza de cunoștințe:

    connected(1, 2).
    connected(2, 1).
    connected(1, 3).
    connected(3, 4).
    

    cu întrebarea ?- path(1, 4).

    Observație: dacă graful conține cicluri, este posibil ca programul să nu își termine execuția.

  2. Scrieți un predicat care determină dacă există drumuri, evitând ciclurile din graf.

    Hint: utilizați un predicat auxiliar care reține într-o listă punctele vizitate până în momentul curent.

Te-ai blocat?
editor soluție
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (3 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
path(5, 10). așteptat: true
?
path(1, 2). așteptat: true
?
path(2, 1). așteptat: false