Problema logico che riguarda una matrice

di il
5 risposte

Problema logico che riguarda una matrice

Ciao a tutti, sto lavorando alla versione visuale di un vecchio gioco che facevo in classe sul quaderno con il compagno di banco e mi sono bloccato a fronte delle mie lacune in matematica.
Ma andiamo con ordine, per prima cosa ecco i dati:

Due punti adiacenti sono separati da una sola unità di distanza (sarebbero le lineette grige) verso l' alto, il basso, a destra o a sinistra.

Un gruppo di punti è composto da punti adiacenti dello stesso colore.

Un gruppo di punti si definisce intrappolato quando non è più possibile posizionare adiacente ad esso un altro punto dello stesso colore.

A titolo di esempio allego l' immagine di alcuni gruppi di punti intrappolati.
http://i47.tinypic.com/vgkb9e.pn

Con queste premesse sto cercando di trovare un metodo generale per capire se un gruppo di punti è intrappolato, il programma infatti deve tracciare una linea attorno ai gruppi di punti intrappolati.
Io pensavo di usare un metodo ricorsivo che per ogni punto controlla i 4 punti adiacenti, saltando quelli che ha gia controllato, e conta i punti di colore diverso.
La ricorsione continua quando trovo un punto dello stesso colore e si blocca quando incontra una posizione vuota o la fine della griglia.
Adesso sto cercando di capire se è possibile dedurre l' intrappolamento di un gruppo dal numero di punti di colore diverso adiacenti al gruppo ma sono a un punto morto.

Se può essere utile ai fini del problema la griglia è rappresentata da una matrice di caratteri che contiene
v -> posizione vuota
r -> punto rosso che il metodo ricorsivo non ha ancora controllato
R -> punto rosso che il metodo ricorsivo ha gia controllato
n -> punto nero che il metodo ricorsivo non ha ancora controllato
N -> punto nero che il metodo ricorsivo ha gia controllato.

Detto questo spero di aver postato nella sezione giusta e mi scuso se il mio problema non è strettamente informatico, se avete qualche idea comunque mi fate un favore

5 Risposte

  • Re: Problema logico che riguarda una matrice

    In che linguaggio vorresti programmarlo? Se è orientato agli oggetti potresti creare un oggetto punto contenente informazioni legate al colore un oggetto contenitore di punti e un griglia.
    Ogni volta che aggiungi un punto effettua un controllo sui punti circostanti, nel caso ci sia un punto non del proprio colore effettua un controllo su tutti i punti appartenenti al contenitore di quel punto per verificare se quell insieme di punti e bloccato in quel caso traccia la linea attorno ai punti
  • Re: Problema logico che riguarda una matrice

    Mi hai dato un' idea potente.

    Fino adesso ho lavorato con i singoli punti mentre invece il gioco lavora con gruppi di punti.
    Devo utilizzare un oggetto gruppo di punti che contiene un vettore dinamico con le coordinate dei punti che lo compongono ed un altro vettore dinamico con le coordinate dei punti di colore diverso adiacenti ai punti nel primo vettore.
    Ci sarà il metodo Add per aggiungere un punto alla lista di punti appartenenti, una funzione di controllo che aggiunge i punti adiacenti alla seconda arraylist ed un' altra funzione di controllo che verifica se il gruppo di punti è intrappolato e in caso di risposta affermativa chiama System.Graphics.DrawLines(puntiAdiacenti[]);

    Chiaramente nel corso di una partita si verranno a creare diversi gruppi di punti, alcuni gruppi potranno fondersi, altri spariranno dopo essere stati intrappolati, sono tutte cose che lavorando con i gruppi non danno problemi.

    Il trick era scollegarsi dai singoli punti, grazie ancora
  • Re: Problema logico che riguarda una matrice

    Non sono sicuro perche' sarebbe da provare ma per verificare se un gruppo di punti e' rinchiuso potresti usare l'algoritmo per uscire da un labirinto, il punto punto di partenza controlla se ci sono punti rossi nelle sue vicinanze, se si verifica la subito se c'e' qualcosa alla sua dx, se la sua dx e' vuoto allora il gruppo non e' rinchiuso, se e' rossa continua( in modo ricorsivo ), se trova un punto blu, il controllo si sposta sul nuovo punto blu che verifichera' con lo stesso sistema di prima partendo dallo spazio subito a dx rispetto al punto blu del passo precedente. Si continuando questo ciclo si torna al punto di partenza vuol dire che il gruppo e' chiuso, applicando questo sistema ai punti della tua immagine funziona, dovresti provare anche con altri schemi eventualmente con buchi al centro se e' ammesso( credo che qui potrebbe dare problemi senza un adeguato controllo).
  • Re: Problema logico che riguarda una matrice

    Attraverso il percorso fatto durante questa verifica puoi creare anche la traccia per creare la linea per il tracciamento creando linee opportune a seconda che l'angolo formato da 3 punti sia a 90, 180 o 270 gradi.
  • Re: Problema logico che riguarda una matrice

    Faccio una domanda che potrebbe complicare la questione:
    uno gruppo a forma di anello, in cui i punti al centro sono vuoti, ma i punti "fuori" sono rossi, deve essere considerato chiuso o aperto?
Devi accedere o registrarti per scrivere nel forum
5 risposte