
Programmare in python: 2. Labirinto
Introduzione
Nella Grecia antica, il labirinto non era soltanto un intreccio di muri, ma una prova di conoscenza. Secondo il mito, Dedalo lo costruì a Creta per imprigionare il Minotauro, ma fu Teseo, guidato dal filo di Arianna, a trasformarlo in un percorso di liberazione. Il labirinto è così divenuto un simbolo della mente umana, della ricerca e della logica: un luogo dove ci si perde per ritrovarsi, dove l’ordine nasce dal disordine.
Oggi, in informatica e matematica, il labirinto è un problema da generare e da risolvere. Ma dietro l’algoritmo — anche il più preciso — rimane sempre l’eco di quel gesto originario: cercare una via.
Un labirinto non è solo un insieme di muri e passaggi: è un linguaggio, una struttura logica che si costruisce passo dopo passo.
Generarlo significa tradurre un’idea astratta — la ricerca in profondità — in un percorso concreto.
In questo progetto, la generazione del labirinto nasce non da una formula predefinita, ma da una logica costruita “dal basso”: un’esplorazione iterativa, autonoma, quasi artigianale, che si sviluppa cella dopo cella come il pensiero che cerca il suo filo.
Risultato
L’algoritmo di generazione del labirinto è stato realizzato in forma iterativa, con backtracking esplicito, al fine di rappresentare in modo trasparente la dinamica di esplorazione. È stato sviluppato in modo indipendente come costruzione logica autonoma e non deriva da implementazioni preesistenti.
A ogni passo, la cella corrente seleziona una direzione disponibile, apre il muro condiviso e procede verso la cella successiva, segnando così la traccia del percorso. Quando non esistono direzioni accessibili, l’algoritmo effettua un backtracking esplicito: il processo torna alla cella precedente, riprendendo l’esplorazione finché tutte le celle risultano visitate.
Questa scelta privilegia un approccio computazionale e costruttivo, più adatto a visualizzare la genesi del labirinto poiché rende visibile la logica di connessione interna del labirinto e la costruzione progressiva del suo spazio. La natura iterativa, oltre a garantire efficienza e controllo esplicito sul flusso di esecuzione, consente un’analisi diretta del comportamento dell’algoritmo e delle sue simmetrie spaziali.
Inoltre, eliminando i limiti di profondità tipici della ricorsione, evita dunque i problemi legati ai limiti dello stack e permette una gestione diretta dello stato e un controllo più immediato dell’esplorazione.


Link utili
▶ Esegui il programma su Replit:
- 1. Clicca sul link Apri su Replit per accedere al progetto.
- 2. Se non hai un account Replit, registrati gratuitamente oppure accedi con Google/GitHub.
- 3. Una volta nel progetto, premi “Run” per avviare l’esecuzione.
- 4. Puoi consultare il file sorgente e, se desideri, scaricarlo o copiarlo dal pannello di codice a sinistra.
▶ Scarica la versione portatile del codice:
- 1. Clicca sul link Scarica File per scaricare il file Labirinto.txt, che contiene il codice sorgente completo in formato .txt.
- 2. Rinomina il file cambiando l’estensione da .txt a .py.
- 3. Ora puoi eseguirlo localmente su qualsiasi IDE per python (es. VS Code, IntelliJ IDEA, Eclipse con PyDev o NetBeans con plugin Python) oppure direttamente da terminale con il comando: python3 Labirinto.py (oppure python Labirinto.py su Windows, se Python 3 è impostato come interprete predefinito), eseguendo il file con l’interprete Python.
▶ Utilizzo:
1. Requisiti
- Il programma richiede il modulo Matplotlib per la visualizzazione grafica. Se non è installata nel proprio ambiente, è possibile aggiungerla tramite terminale con il comando:
pip install matplotlib
2. Configurazione del reticolo
- Le dimensioni del labirinto sono definite dai parametri:
XCOLONNE = 50
YRIGHE = XCOLONNE
- È possibile modificare questi valori per ottenere labirinti di dimensioni diverse, anche rettangolari. Le dimensioni attuali sono ottimizzate per un’esecuzione bilanciata; valori eccessivi non sono stati testati e potrebbero richiedere risorse computazionali elevate.
3. Visualizzazione e salvataggio
- Il programma genera un’immagine del labirinto in formato .png.
Tale file generato viene salvato nella directory di esecuzione del programma, con nome predefinito “labirinto”. - Se si desidera solo la visualizzazione a schermo, è sufficiente:
- commentare la riga che salva l’immagine (plt.savefig(…)), e
- decommentare quella che mostra il grafico (plt.show()), o viceversa.
- È inoltre possibile disattivare la stampa testuale del reticolo (usata per analisi e debug) che elenca le celle nella forma:
[id, (x+yj), [E, N, O, S], …] commentando la riga:
print(_reticolo)
Codice
L’algoritmo prende forma nel codice come in una mappa che si disegna da sé: ogni cella, ogni muro abbattuto, restituisce il ritmo di un percorso logico che diventa spazio. L’implementazione, pur seguendo un approccio rigoroso e leggibile, conserva la sua impronta concettuale — un equilibrio tra calcolo e rappresentazione, dove la logica del labirinto si rivela attraverso la propria espressione matematica.
