Anteprima
Vedrai una selezione di 10 pagine su 170
Appunti di fondamenti di informatica e programmazione II Pag. 1 Appunti di fondamenti di informatica e programmazione II Pag. 2
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 6
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 11
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 16
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 21
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 26
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 31
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 36
Anteprima di 10 pagg. su 170.
Scarica il documento per vederlo tutto.
Appunti di fondamenti di informatica e programmazione II Pag. 41
1 su 170
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Algoritmo di visita di un labirinto

/* SE IL NODO NON E' GIA' STATO VISITATO, VISITALO */

if(Labirinto[i_estratto].visitato==0 )

{ //Visita nodo

printf("[%c] ", Labirinto[i_estratto].info.nome);

Labirinto[i_estratto].visitato=1;

n_cnt++; /* Ad ogni estrazione, conto */

/* SE SI E' ARRIVATI A VISITARE L'USCITA Q, Esci dalla VISITA! */

if(Labirinto[i_estratto].info.nome=='Q')

{/* SIAMO ARRIVATI A Q, sarebbe inutile continuare perche' era

return; lo SCOPO RICHIESTO */

/* INSERISCI ADIACENZE NELLO STACK per n nodi adiacenti al nodo estratto */

n_adiacenze = Labirinto[i_estratto].n_nodi_adiac; //n adiacenze per quel nodo

i

{

for(i=0;

Push(Stack, Labirinto[i_estratto].Adiacenze[i], &i_testa);

}

}

/* Push: Inserire in testa dell'array, appunto, come lo stack. */

Push(short Vet_Stack[], Elemento, *Testa)

{ //Se non ho superato il massimo dello stack

if(*Testa

{ /* *Testa=*Testa+1 -> Vet_Stack=Elemento

La mia testa puntera' SEMPRE */

all'ULTIMO ELEMENTO inserito, quindi incrementando
mettero' l'elemento in testa o PUSHO */Vet_Stack[++(*Testa)]=Elemento;}
{puts("\n*------- NON INSERISCO NULLA, STACK PIENO! --------*\n");exit(1);}
else}
/* Pop: Eliminare dalla testa dell'array. */
Pop(short Vet_Stack[], *i_estratto, *Testa)
void short short{
    //Se c'e' qualcosa
    if(*Testa>-1){
        *i_estratto = Vet_Stack[*Testa];
        /* Decrementando l'indice dell'ultimo elemento inserito, appunto, non verra'piu' "visto" l'ultimo elemento inserito, nascondendolo*/
        (*Testa)--;
        //altrimenti "Stack vuoto" viene gestito nel main
        Giuseppe Accardo - Programmazione II 134}
    {puts("---- ERRORE Stack vuoto!! -----");exit(1);}
    else}
Disegna_labirinto()
void{
    puts("\tK---&---A---B---C ");
    puts("\t| \\ / | ");
    puts("\t| \\ / | ");
    puts("\tJ D E ");
    puts("\t| / \\ | ");
    puts("\t| / \\ | ");
    puts("\tY--- X G");
---F");puts("\t| | | | ");puts("\t| | | | ");puts("\tW Z H I");puts("\t| | | | ");puts("\t| | | | ");puts("\tV--- U L ---M");puts("\t| \\ / | ");puts("\tT---S--R-N--O---P");puts("\t \\ / ");puts("\t \\ / ");puts("\t \\ / ");puts("\t Q ");}
/* Assegna Adiacenze: Potremo usare sia una matrice di adiacenze che una lista di adiacenze,ma per il problema interessato e per rapidita', scegliamo di implementare una strutturareticolare molto semplice (e' come se avessimo un albero generico)*/
assegna_adiacenze(VERTICE_LABIRINTO Labirinto[], *inizio_lab)
void short{
    /* Da dove comincio a visitare? Da A individuato dall'indice 0 */
    *inizio_lab = 0;
    Labirinto[0].info.nome='A';
    Labirinto[0].n_nodi_adiac=2;
    Labirinto[0].Adiacenze[0] = 26; //Il vertice A è collegato al vertice &Labirinto[0].Adiacenze[1] = 1; //Il vertice A è

collegato al vertice BLabirinto[0].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[1].info.nome='B';

Labirinto[1].n_nodi_adiac=3;

Labirinto[1].Adiacenze[0] = 0; //Il vertice B è collegato al vertice A

Labirinto[1].Adiacenze[1] = 2; //Il vertice B è collegato al vertice C

Labirinto[1].Adiacenze[2] = 3; //Il vertice B è collegato al vertice D

Labirinto[1].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[2].info.nome='C';

Labirinto[2].n_nodi_adiac=2;

Labirinto[2].Adiacenze[0] = 1; //Il vertice C è collegato al vertice B

Labirinto[2].Adiacenze[1] = 4; //Il vertice C è collegato al vertice E

Labirinto[2].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[3].info.nome='D';

Labirinto[3].n_nodi_adiac=4;

Labirinto[3].Adiacenze[0] = 26; //Il vertice D è collegato al vertice #

Labirinto[3].Adiacenze[1] = 1; //Il vertice D è collegato al vertice

BLabirinto[3].Adiacenze[2] = 23; //Il vertice D è collegato al vertice X Labirinto[3].Adiacenze[3] = 6; //Il vertice D è collegato al vertice G Labirinto[3].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato Labirinto[4].info.nome='E'; Labirinto[4].n_nodi_adiac=2; Labirinto[4].Adiacenze[0] = 2; //Il vertice E è collegato al vertice C Labirinto[4].Adiacenze[1] = 5; //Il vertice E è collegato al vertice F Labirinto[4].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato Labirinto[5].info.nome='F'; Labirinto[5].n_nodi_adiac=3; Labirinto[5].Adiacenze[0] = 4; //Il vertice F è collegato al vertice E Labirinto[5].Adiacenze[1] = 6; //Il vertice F è collegato al vertice G Labirinto[5].Adiacenze[2] = 8; //Il vertice F è collegato al vertice I Labirinto[5].visitato = 0; //1 - nodo visitato; 0 - nodo non

visitatoLabirinto[6].info.nome='G';

Labirinto[6].n_nodi_adiac=3;

Labirinto[6].Adiacenze[0] = 3; //Il vertice G è collegato al vertice D

Labirinto[6].Adiacenze[1] = 5; //Il vertice G è collegato al vertice F

Labirinto[6].Adiacenze[2] = 7; //Il vertice G è collegato al vertice H

Labirinto[6].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[7].info.nome='H';

Labirinto[7].n_nodi_adiac=3;

Labirinto[7].Adiacenze[0] = 6; //Il vertice H è collegato al vertice G

Labirinto[7].Adiacenze[1] = 25; //Il vertice H è collegato al vertice Z

Labirinto[7].Adiacenze[2] = 11; //Il vertice H è collegato al vertice L

Labirinto[7].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[8].info.nome='I';

Labirinto[8].n_nodi_adiac=2;

Labirinto[8].Adiacenze[0] = 5; //Il vertice I è collegato al vertice F

Labirinto[8].Adiacenze[1] = 12; //Il vertice I è collegato al vertice L

vertice H è collegato al vertice MLabirinto[8].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato
Labirinto[9].info.nome='J';
Labirinto[9].n_nodi_adiac=2;
Labirinto[9].Adiacenze[0] = 10; //Il vertice J è collegato al vertice K
Labirinto[9].Adiacenze[1] = 24; //Il vertice J è collegato al vertice Y
Labirinto[9].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato
Labirinto[10].info.nome='K';
Labirinto[10].n_nodi_adiac=2;
Labirinto[10].Adiacenze[0] = 26; //Il vertice K è collegato al vertice #
Labirinto[10].Adiacenze[1] = 9; //Il vertice K è collegato al vertice J
Labirinto[10].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato
Labirinto[11].info.nome='L';
Labirinto[11].n_nodi_adiac=3;
Labirinto[11].Adiacenze[0] = 7; //Il vertice L è collegato al vertice H
Labirinto[11].Adiacenze[1] = 12; //Il vertice L è collegato al vertice M
Labirinto[11].Adiacenze[2] = 13; //Il vertice

L'è collegato al vertice N

Labirinto[11].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[12].info.nome='M';

Labirinto[12].n_nodi_adiac=3;

Labirinto[12].Adiacenze[0] = 8; //Il vertice M è collegato al vertice I

Labirinto[12].Adiacenze[1] = 11; //Il vertice M è collegato al vertice L

Labirinto[12].Adiacenze[2] = 15; //Il vertice M è collegato al vertice P

Labirinto[12].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[13].info.nome='N';

Labirinto[13].n_nodi_adiac=3;

Labirinto[13].Adiacenze[0] = 11; //Il vertice N è collegato al vertice L

Labirinto[13].Adiacenze[1] = 14; //Il vertice L è collegato al vertice O

Labirinto[13].Adiacenze[2] = 17; //Il vertice L è collegato al vertice R

Labirinto[13].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[14].info.nome='O';

Labirinto[14].n_nodi_adiac=3;

Labirinto[14].Adiacenze[0] = 13; //Il vertice O

è collegato al vertice NLabirinto[14].

Adiacenze[1] = 15; //Il vertice O è collegato al vertice PLabirinto[14].

Adiacenze[2] = 16; //Il vertice O è collegato al vertice Q (uscita)Labirinto[14].

visitato = 0; //1 - nodo visitato; 0 - nodo non visitatoLabirinto[15].info.nome='P';

Labirinto[15].n_nodi_adiac=2;Labirinto[15].Adiacenze[0] = 12; //Il vertice P è collegato al vertice MLabirinto[15].

Adiacenze[1] = 14; //Il vertice P è collegato al vertice OLabirinto[15].

visitato = 0; //1 - nodo visitato; 0 - nodo non visitatoLabirinto[16].info.nome='Q';

Labirinto[16].n_nodi_adiac=2;Labirinto[16].Adiacenze[0] = 14; //Il vertice Q è collegato al vertice OLabirinto[16].

Adiacenze[1] = 18; //Il vertice Q è collegato al vertice SLabirinto[16].

visitato = 0; //1 - nodo visitato; 0 - nodo non visitatoLabirinto[17].info.nome='R';

Labirinto[17].n_nodi_adiac=3;Labirinto[17].Adiacenze[0] = 13; //Il

visitato Il vertice R ãä collegato al vertice N Labirinto[17].Adiacenze[1] = 16; //Il vertice R ãä collegato al vertice U Labirinto[17].Adiacenze[2] = 18; //Il vertice R ãä collegato al vertice S Labirinto[17].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato Labirinto[18].info.nome='S'; Labirinto[18].n_nodi_adiac=3; Labirinto[18].Adiacenze[0] = 17; //Il vertice S ãä collegato al vertice N Labirinto[18].Adiacenze[1] = 19; //Il vertice S ãä collegato al vertice T Labirinto[18].Adiacenze[2] = 16; //Il vertice S ãä collegato al vertice Q (uscita) Labirinto[18].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato Labirinto[19].info.nome='T'; Labirinto[19].n_nodi_adiac=2; Labirinto[19].Adiacenze[0] = 21; //Il vertice T ãä collegato al vertice V Labirinto[19].Adiacenze[1] = 18; //Il vertice T ãä collegato al vertice S Labirinto[19].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

visitatoLabirinto[20].info.nome='U';

Labirinto[20].n_nodi_adiac=3;

Labirinto[20].Adiacenze[0] = 25; //Il vertice U è collegato al vertice Z

Labirinto[20].Adiacenze[1] = 21; //Il vertice U è collegato al vertice V

Labirinto[20].Adiacenze[2] = 17; //Il vertice U è collegato al vertice R

Labirinto[20].visitato = 0; //1 - nodo visitato; 0 - nodo non visitato

Labirinto[21].info.nome='V';

Giuseppe Accardo - Programmazione II 136

Labirinto[21].n_nodi_adiac=3;

Labirinto[21].Adiacenze[0] = 22; //Il vertice V è collegato al vertice W

Labirinto[21].Adiacenze[1] = 20; //Il vertice V è collegato al vertice U

Labirinto[21].Adiacenze[2] = 19; //Il vertice V è collegato al vertice T

Dettagli
A.A. 2021-2022
170 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher riukmine201216 di informazioni apprese con la frequenza delle lezioni di fondamenti di informatica e programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Napoli - Parthenope o del prof Rizzardi Mariarosaria.