Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [c++] labirinto delimitato da zero..restituire cella entrata/uscita

    Allego la traccia dell'esercizio su cui ho problemi...mi date una mano per iniziare a impostarlo almeno?!

    ho pensato di fare un qualcosa tipo:
    scorro la matrice, ad ogni passo guardo avanti a sinistra e a destra della cella... se è diversa da 0 (zero - che sarebbe il muro del labirinto) vado avanti fino ad arrivare ad uno dei 4 bordi..poi però dovrei restituire la posizione di entrata e uscita...e non so come fare!
    Immagini allegate Immagini allegate
    • Tipo di file: png 3.png‎ (16.6 KB, 36 visualizzazioni)

  2. #2
    Sei sulla buona strada, il tuo problema è sostanzialmente lo stesso del floodfill (lo strumento riempimento dei programmi di grafica), del cui algoritmo trovi facilmente esempi in giro; in particolare puoi implementare una soluzione ricorsiva in maniera molto semplice (anche se a rischio stack overflow in caso di labirinti immensi).

    (tra parentesi, l'immagine è troppo piccola e risulta illeggibile )
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    Ho caricato la traccia su: http://depositfiles.com/files/hkvw7h2bt

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    Originariamente inviato da mistergks
    Ho caricato la traccia su: http://depositfiles.com/files/hkvw7h2bt
    qua si vede meglio: http://depositfiles.com/files/nxlow8eh3

  5. #5
    ... e così si vede anche senza dover lottare contro depositfiles...
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6

    Re: [c++] labirinto delimitato da zero..restituire cella entrata/uscita

    Originariamente inviato da mistergks però dovrei restituire la posizione di entrata e uscita...e non so come fare!
    Scusa ma la posizione di entrata è il punto dal quale parti.
    Io partirei sempre dalla prima colonna e la scorrerei fino ad incontrare un numero diverso da 0, se non ce ne sono, invece scorri la prima riga! Altrimenti continui: ultima colonna o ultima riga: una delle quattro deve per forza contenere un ingresso. Mentre scorri usi un intero e lo incrementi, in questo modo conoscerai la posizione di partenza.

    Per quanto riguarda la posizione di uscita è la stessa cosa: usi una coppia di interi che inizialmente è l'ingresso, e man mano che il tuo algoritmo si ripete aggiorna questa coppia di numeri, il suo ultimo valore sarà la posizione di uscita (quando la riga o la colonna equivalgono ad una riga/colonna della matrice che sta sul bordo).

    Edit:
    Dato che gli ingressi possono essere molteplici, potresti contarli e salvarli tutti e far ripetere l'algoritmo per ognuno di essi finchè non ne trovi uno che raggiunge un bordo

  7. #7
    Io procederei così:
    - esamini tutto il bordo, alla ricerca di un uno;
    - quando becchi un uno, fai partire una procedura ricorsiva su quella posizione di partenza, che ad ogni step di ricorsione si "guarda attorno" cercando il numero successivo; se raggiunge qualcosa (arriva ad un bordo) restituisce la posizione finale, se arriva ad un vicolo cieco restituisce un qualche flag (ad esempio una posizione non valida);
    - il programma termina quando si è esaminato tutto il bordo o quando la procedura ricorsiva ha fornito una posizione finale valida.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Originariamente inviato da MItaly
    Io procederei così:
    - esamini tutto il bordo, alla ricerca di un uno;
    [...]
    non di un uno ma di un qualsiasi numero diverso da 0 piccola svista.
    Comunque ottima idea quella del fa tornare la posizione, si può far ripetere la funzione finchè il dato restituito è un bordo o è invalido(per esempio -1,-1). Mi piace.
    Poi se la posizione era valida esci dal loop, altrimenti parti da un altro ingresso (se c'è)

  9. #9
    Originariamente inviato da MegaAlchimista
    non di un uno ma di un qualsiasi numero diverso da 0 piccola svista.
    Se però è diverso da uno devi richiamare la funzione ricorsiva in modo che proceda cercando i numeri in verso discendente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Come lo imposteresti se invece i bivi ci fossero? Se a metà strada si trovasse di fronte a due o tre possibilità?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.