Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.99 KB | None | 0 0
  1. %{
  2. Questo algoritmo cerca un percorso per muoversi dalla posizione iniziale
  3. alla posizione finale sulla mappa
  4. Legenda della mappa: 0 MURO, 1 POSIZIONE NON ESPLORATA, 2 INIZIO,3 FINE,
  5. 4 POSIZIONE ESPLORATA, 5 PERCORSO DISPONIBILE ANCORA DA ESPLORARE
  6. RAGGIUNGIBILE DA QUESTA POSIZIONE
  7. La mappa è una matrice fatta di 0 e di 1. Ci sarà una cella con valore 2 e
  8. una con valore 3 che rappresentano rispettivamente l'inizio e la fine.
  9. %}
  10. mappa
  11. [posx,posy]=trovainizio(mappa);
  12. spostati(posx,posy,mappa);
  13.  
  14.  
  15. %%Cerca la posizione iniziale (identificata dal numero 2)
  16. function [xcor,ycor]=trovainizio(matrice)
  17. [r,c]=size(matrice);
  18. for i=1:r
  19.     for j=1:c
  20.         if matrice(i,j)==2
  21.             xcor=i;
  22.             ycor=j;
  23.         end
  24.     end
  25. end
  26. end
  27.  
  28.  
  29. %%Spostati in una posizione vicina cercandola tra le otto celle attorno a
  30. %%quella in cui ci si trova
  31. function spostati(xcor,ycor,mappa)
  32. [r,c]=size(mappa);
  33. tornoindietro=0;
  34. bivio=0;
  35. nuovastrada=0;
  36. arrivato=0;
  37. mappa(xcor,ycor)=4;
  38. %%Analizzo le celle attorno alla mia escludendo la mia posizione e le celle
  39. %%al di fuori della matrice
  40. for i=-1:1
  41.     for j=-1:1
  42.         if i~=0 | j~=0
  43.             if 1<=xcor+i & xcor+i<=r & 1<=ycor+j & ycor+j<=c
  44.         valore=mappa(xcor+i,ycor+j);
  45.         switch valore
  46.             case 1
  47.                 if nuovastrada==0
  48.                     nuovastradax=xcor+i;
  49.                     nuovastraday=ycor+j;
  50.                     nuovastrada=1;
  51.                 else
  52.                     mappa(xcor,ycor)=5;
  53.                     %%se ci sono più celle inesplorate vicino a quella in
  54.                     %%cui mi trovo, assegno alla cella in cui trovo il
  55.                     %%valore 5 (significa che da questa cella si possono
  56.                     %%raggiungere altre celle non ancora esplorate)
  57.                 end
  58.             case 3
  59.                 arrivato=1;
  60.             case 4
  61.                 tornoindietro=1;
  62.                 indx=xcor+i;
  63.                 indy=ycor+j;
  64.             case 5
  65.                 bivio=1;
  66.                 biviox=xcor+i;
  67.                 bivioy=ycor+j;
  68.         end
  69.             end
  70.         end
  71.     end
  72. end
  73.  
  74.  
  75. %%Cosa fare una volta analizzate 8 le celle vicine? Cerco di muovermi
  76. %%seguendo queste preferenze:1 celle non esplorate,2 celle già esplorate ma
  77. %%che sono collegate a celle non esplorate,3 cella da cui sono arrivato(torno indietro).
  78. if arrivato~=1
  79.     if nuovastrada~=1
  80.         if bivio~=1
  81.             if tornoindietro~=1
  82.                 fprintf('Sei bloccato')
  83.             else
  84.                 %%Unica via disponibile è quella da cui sono arrivato
  85.                 %%quindi considero anche la cella in cui mi trovo come un
  86.                 %%muro
  87.                 mappa(xcor,ycor)=0;
  88.                 spostati(indx,indy,mappa)
  89.             end
  90.         else
  91.             spostati(biviox,bivioy,mappa)
  92.         end
  93.     else
  94.         spostati(nuovastradax,nuovastraday,mappa)
  95.     end
  96. else
  97.     %%Sono vicino alla fine
  98.     mappa
  99.     fprintf('Sei arrivato')
  100. end
  101. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement