Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- Questo algoritmo cerca un percorso per muoversi dalla posizione iniziale
- alla posizione finale sulla mappa
- Legenda della mappa: 0 MURO, 1 POSIZIONE NON ESPLORATA, 2 INIZIO,3 FINE,
- 4 POSIZIONE ESPLORATA, 5 PERCORSO DISPONIBILE ANCORA DA ESPLORARE
- RAGGIUNGIBILE DA QUESTA POSIZIONE
- La mappa è una matrice fatta di 0 e di 1. Ci sarà una cella con valore 2 e
- una con valore 3 che rappresentano rispettivamente l'inizio e la fine.
- %}
- mappa
- [posx,posy]=trovainizio(mappa);
- spostati(posx,posy,mappa);
- %%Cerca la posizione iniziale (identificata dal numero 2)
- function [xcor,ycor]=trovainizio(matrice)
- [r,c]=size(matrice);
- for i=1:r
- for j=1:c
- if matrice(i,j)==2
- xcor=i;
- ycor=j;
- end
- end
- end
- end
- %%Spostati in una posizione vicina cercandola tra le otto celle attorno a
- %%quella in cui ci si trova
- function spostati(xcor,ycor,mappa)
- [r,c]=size(mappa);
- tornoindietro=0;
- bivio=0;
- nuovastrada=0;
- arrivato=0;
- mappa(xcor,ycor)=4;
- %%Analizzo le celle attorno alla mia escludendo la mia posizione e le celle
- %%al di fuori della matrice
- for i=-1:1
- for j=-1:1
- if i~=0 | j~=0
- if 1<=xcor+i & xcor+i<=r & 1<=ycor+j & ycor+j<=c
- valore=mappa(xcor+i,ycor+j);
- switch valore
- case 1
- if nuovastrada==0
- nuovastradax=xcor+i;
- nuovastraday=ycor+j;
- nuovastrada=1;
- else
- mappa(xcor,ycor)=5;
- %%se ci sono più celle inesplorate vicino a quella in
- %%cui mi trovo, assegno alla cella in cui trovo il
- %%valore 5 (significa che da questa cella si possono
- %%raggiungere altre celle non ancora esplorate)
- end
- case 3
- arrivato=1;
- case 4
- tornoindietro=1;
- indx=xcor+i;
- indy=ycor+j;
- case 5
- bivio=1;
- biviox=xcor+i;
- bivioy=ycor+j;
- end
- end
- end
- end
- end
- %%Cosa fare una volta analizzate 8 le celle vicine? Cerco di muovermi
- %%seguendo queste preferenze:1 celle non esplorate,2 celle già esplorate ma
- %%che sono collegate a celle non esplorate,3 cella da cui sono arrivato(torno indietro).
- if arrivato~=1
- if nuovastrada~=1
- if bivio~=1
- if tornoindietro~=1
- fprintf('Sei bloccato')
- else
- %%Unica via disponibile è quella da cui sono arrivato
- %%quindi considero anche la cella in cui mi trovo come un
- %%muro
- mappa(xcor,ycor)=0;
- spostati(indx,indy,mappa)
- end
- else
- spostati(biviox,bivioy,mappa)
- end
- else
- spostati(nuovastradax,nuovastraday,mappa)
- end
- else
- %%Sono vicino alla fine
- mappa
- fprintf('Sei arrivato')
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement