daily pastebin goal
56%
SHARE
TWEET

Untitled

a guest Jan 23rd, 2019 88 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top