Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    428

    riconoscimento zone in matrice

    buon giorno,
    dall'oggetto non si capisce molto, faccio subito un esempio.
    Se per esempio ho una matrice di questo tipo:
    0 0 0 0 0 0 0 0 0
    0 1 1 0 1 1 1 0 0
    0 1 0 0 1 1 0 1 0
    0 0 0 0 0 0 0 0 0

    come posso sapere quante aree di 1 ci sono adiacenti e di quale dimensione?
    Quindi per esempio area di 3 a partire da 1,1; 5 da 4,1 e 1 da 7,1 ...

    Applicare un algoritmo di backtracking che cerca di percorrere tutte le strade possibili? Vedere tutto come dei nodi aggiungendo anche un campo visita, per facilitarne la scansione? Vedere tutto come un grafo con archi bidirezionali?! Se metto ad uno inizio a cercare da sinistra in senso orario un eventuale uno a cui linkare il nuovo uno?!

    Ho detto qualcosa di sensato? Suggerimenti?

    grazie
    ciao
    gnegno

  2. #2
    Potresti fare così:

    pseudocodice:
    codice:
    <vector> points; //lista dinamica di punti
    <vector> temp;
    int aree = 0; //conte la aree trovate
    
    1)
    cerchi nella matrice un punto che rispetti queste 2 caratteristiche:
    deve essere uguale a 1 e non deve essere già nella lista point.
    Se il punto rispetta queste condizioni:
        aree++;
        metti il punto nella lista points
        2)
        Cerchi a destra e sinistra, su e giù di questo punto per trovare tutti i punti uguali a 1. 
        Tutti i punti aventi queste caratteristiche finiscono in temp.
        Prendi il primo punto in temp, toglilo da temp e mettilo in points... ripeti 2) per questo punto.
        Quando la lista temp è vuota ripeti a 1 fino ad      esaurimento matrice
    se qualcosa ti appare poco chiara (probabile ) chiedi pure

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    12
    Mi permetto una piccola modifica
    In verde quello che aggiungerei, in rosso quello che toglierei:

    codice:
    <vector> points; //lista dinamica di punti
    <vector> temp;
    int aree = 0; //conte la aree trovate
    
    1)
    cerchi nella matrice,per righe dall'alto verso il basso e per colonne da sinistra a destra,
    un punto che rispetti queste 2 caratteristiche:
    deve essere uguale a 1 e non deve essere già nella lista point.
    Se il punto rispetta queste condizioni:
        aree++;
        metti il punto nella lista points
        2)
        Cerchi a destra e sinistra, su e giù rispetto a questo punto,
        rispettando lo stesso criterio di ricerca di cui al punto 1)
        per trovare tutti i punti uguali a 1. 
        Tutti i punti aventi queste caratteristiche finiscono in temp.
        Prendi il primo punto in temp, toglilo da temp e mettilo in points... ripeti 2) per questo punto.
    Ripeti 1) fino ad esaurimento matrice
    Giusto una cavolatina che mi è venuta in mente

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    428
    grazie proverò!

  5. #5
    Originariamente inviato da Dav82
    Mi permetto una piccola modifica
    In verde quello che aggiungerei, in rosso quello che toglierei:

    codice:
    <vector> points; //lista dinamica di punti
    <vector> temp;
    int aree = 0; //conte la aree trovate
    
    1)
    cerchi nella matrice,per righe dall'alto verso il basso e per colonne da sinistra a destra,
    un punto che rispetti queste 2 caratteristiche:
    deve essere uguale a 1 e non deve essere già nella lista point.
    Se il punto rispetta queste condizioni:
        aree++;
        metti il punto nella lista points
        2)
        Cerchi a destra e sinistra, su e giù rispetto a questo punto,
        rispettando lo stesso criterio di ricerca di cui al punto 1)
        per trovare tutti i punti uguali a 1. 
        Tutti i punti aventi queste caratteristiche finiscono in temp.
        Prendi il primo punto in temp, toglilo da temp e mettilo in points... ripeti 2) per questo punto.
    Ripeti 1) fino ad esaurimento matrice
    Giusto una cavolatina che mi è venuta in mente
    Pienamente d'accordo sulle correzioni
    I punti a sinistra uguali a 1 sono messi precedentemente in Points

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 © 2025 vBulletin Solutions, Inc. All rights reserved.