Il giocattolo che ho in mente e' una versione della torre di Hanoi in cui alcune mosse vengono proibite per rendere ancora piu' sorprendente il fatto che sia comunque possibile spostare la torre. Come nel puzzle della torre di Hanoi classico, troviamo n dischi, numerati dal piu' piccolo al piu' grande come 1,2, ...,n. Ciascuno di essi e' collocato su uno di tre pioli (i dischi sono ciambelle), numerati 1,2,3. Non tutti i collocamenti degli n dischi nei tre pioli sono ammissibili: i pioli sono verticali e non e' possibile collocare un disco A sopra un disco B piu' piccolo di A. Il vostro programma ricevera' in input due configurazioni ammissibili: esempio di file input.txt formato di file input.txt: 3 n=numero dei dischi 3 2 0 1 0 = 0 __________ 1 0 3 2 0 = 0 e dovra' specificare la piu' corta sequenza di mosse che porti dalla prima configurazione alla seconda. ATTENZIONE: l'unica mossa elementare consentita consiste nello spostare un singolo disco dal piolo i al piolo j, e puo' avere luogo solo se entrambe le seguenti condizioni sono rispettate: 1. la mossa porta da configurazione ammissibile a configurazione ammissibile (come in Hanoi classico); 2. |i-j| = 1, ossia non si puo' spostare un disco dal piolo 1 al 3 o viceversa (CONDIZIONE AGGIUNTIVA). In pratica, come vista dai dischi, si gioca su una V invece che su un triangolo con tutti e tre i lati - da cui il nome sintetico di questo esercizio. Concludendo l'esempio: sull'input di cui sopra fara' punto il programma che, sempre nella directory corrente, scrivera' il seguente file: output.txt Sposta il disco 1 dal piolo 2 al piolo 3 Sposta il disco 2 dal piolo 1 al piolo 2 Sposta il disco 1 dal piolo 3 al piolo 2 Sposta il disco 1 dal piolo 2 al piolo 1 Sposta il disco 2 dal piolo 2 al piolo 3 Sposta il disco 1 dal piolo 1 al piolo 2 Sposta il disco 1 dal piolo 2 al piolo 3 Sposta il disco 3 dal piolo 1 al piolo 2 Sposta il disco 1 dal piolo 3 al piolo 2 Sposta il disco 1 dal piolo 2 al piolo 1 Sposta il disco 2 dal piolo 3 al piolo 2 Assunzioni: - Tempo limite = 2 secondi. (Anche se nell'istanza piu' grande n=1000, ho comunque costruito istanze nelle quali la distanza tra le due configurazioni non eccede 100000). - Vi sono almeno 6 istanze in cui sia la configurazione di partenza che quella di destinazione vedono tutti i dischi collocati su un unico piolo. - Vi sono almeno 12 istanze con n <= 20. Nota: potete avvalervi liberamente di tutti i codici da me sviluppati come svolgimento di esercizi di esami precedenti e lasciati a disposizione per il presente esame. (Sia solutori, che generatori, che quant'altro ho valutato opportuno lasciare a vostra disposizione per il singolo esame).