.dsy:it. Pages (8): « First ... « 2 3 4 5 [6] 7 8 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Algoritmi e strutture dati (http://www.dsy.it/forum/forumdisplay.php?forumid=207)
-- progetto Hitori (http://www.dsy.it/forum/showthread.php?threadid=38459)


Posted by ivanbag on 09-07-2009 08:14:

Immaginavo che BI e NI fossero da applicare alle celle non ancora controllate, mi mancano solo loro e poi ho implementato tutto. Devo solo farlo funzionare... ahahaha

Io T l'ho implementata più o meno così:
se mat[0][0].num == mat[2][0].num && mat[0][1].num == mat[3][1].num ... ovviamente questo è solo uno dei tanti if (all'interno dei for) del trapezio, per esempio devo controllare che che gli indici durante i for di controllo non escano dalla matrice, oppure "il senso" del trapezio, perché, per come l'ho interpretato io, può essere "girato" in modi diversi... E adesso che ci penso non ho provato a farlo con i due vicini in basso ed i diagonali in alto O_O , corro ssssubito ad aggiungere quella parte!

annerire e non_annerire io le ho implementate per comodità, ma effettivamente possono non essere obbligatorie. Le ho trovate comode perché le implementi una volta sola e le riusi spesso, in più al loro interno è facile inserire le chiamate alle euristiche che applichi solo quando annerisci o non annerisci una cella... In questo modo con una funzione le chiami tutte ;)

Originally posted by garfa84

Quello che mi chiedo come faccio a memorizzare la supposizione?
e per la verifica che il 2 non rimanga chiuso bisogna applicare la regola 3 non close_edge, perchè nel caso specifico vabe ma in altri casi potrebbe non andare bene!!!quindi come faccio a verificarlo???


Me lo chiedo anch'io... Oggi ragiono per bene alla terza regola, vediamo se ne cavo fuori qualcosa...

Ivan

__________________
Tecum sunt, quae fugis... Seneca


Posted by Lallac10 on 09-07-2009 09:05:

in pratica annerisci e non_annerire richiamano rispettivamente:
NV A e non_annerire, mentre non annerire richiama SB e annerisci.
Il mio dubbio resta su come gli passo le coordinate su cui eseguire annerisci e non annerire quando non è la prima chiamata? Oppure devo inserire nelle euristiche le chiamate alle due funzioni ricorsive?
a me mancano queste due e NI BI poi ovviamente farlo funzionare


Posted by ivanbag on 09-07-2009 09:40:

Cosa intendi per "passare le coordinate"?
Io annerisci l'ho strutturata così:

code:
void annerire( matrice m[M][M], int x, int y ) { if( ... ) { ... nv( m, x, y ); a( m ); } else ... }

Dove x e y sono riga e colonna della cella da annerire...
nv prende gli stessi x e y e fa i suoi controlli all'interno, mentre a non avevo voglia di sbattermi a farla per singolo angolo, quindi ogni volta che annerisco qualcosa me li controlla tutti e 4, anche perché ho notato che se le euristiche funzionano è facile che per reazione a catena si arrivi agli angoli, quindi è meglio controllarli spesso...

Spero di aver capito la domanda ed esserti stato utile :)
Ciau
Ivan

__________________
Tecum sunt, quae fugis... Seneca


Posted by Lallac10 on 09-07-2009 09:44:

si ok ora mi sorge un'altra domanda....la chiamata ricorsiva a annerisci o non annerisci avrà dei parametri che saranno la matrice e le due coordinate o x e y come le hai chiamate tu su cui eseguire le euristiche.... per quello che mi chiedevo se le chiamate ricorsive devono essere all'interno delle euristiche....è questo il mio problema! o almeno uno dei tanti:)


Posted by ivanbag on 09-07-2009 10:46:

Ok...

Allora, ti porto il mio esempio per CS. Al suo interno, una volta eseguiti i controlli, passo ad annerire la matrice e le coordinate della cella. Da annerire chiamo:

- NV che a sua volta chiama non_annerire passando matrice e cella e con gli stessi parametri chiama anche SB. SB a sua volta chiama annerire. Qui ho avuto il primo problema, perché come noterai rischia di continuare il giro all'inifinito, per fare questo ho fatto in modo che nv controlli con un if le celle vicine, se sono già state "toccate" non fa partire SB, al contrario, se non sono state "toccate" SB parte. Ovvio che al primo giro parte e al secondo no.
- A che, come dicevo prima, controlla tutti gli angoli, quindi gli passo solo la matrice. Al suo interno richiama solo non_annerire. Non ho ancora deciso se far partire SB anche all'interno di A, questo mi creerebbe qualche casino con l'impostazione che ho dato.

E' importante mettere uno "stop" forzato alle continua chiamate o ti perdi in un bel loop... Ieri mattina ho cristato parecchio perché non capivo come fare... Spero di essere stato chiaro, è abbastanza un casino a parole, parla meglio il codice, ma non posso metterlo :P

Ciau
Ivan

EDIT: per BI e NV mi è venuto in mente che posso sfruttare l'impostazione che ho dato. All'interno della matrice di strutture che ho creato ho un int che contiene il numero e ho un int che fa da "tag" per le celle già controllate. Quelle ancora non controllate hanno un determinato "tag". Una volta terminate le euristiche è facile scorrere la matrice alla ricerca delle celle non visitate. Da qui si può scegliere se lavorarci direttamente oppure crearsi una struttura esterna ed applicare BI e NV ed eventuali altri controlli...

__________________
Tecum sunt, quae fugis... Seneca


Posted by Lallac10 on 09-07-2009 10:51:

ok quindi tu per ogni euristica richiami rispettivamente o annerire o non annerire giusto? non voglio vedere il tuo codice ma cercare di capirne un pò di più:)


Posted by ivanbag on 09-07-2009 10:55:

Originally posted by Lallac10
ok quindi tu per ogni euristica richiami rispettivamente o annerire o non annerire giusto? non voglio vedere il tuo codice ma cercare di capirne un pò di più:)


Esatto, per ogni euristica richiamo annerire e/o non_annerire. Come dicevo annerire a sua volta richiama euristiche... Un bel macello ^^

Ivan

__________________
Tecum sunt, quae fugis... Seneca


Posted by garfa84 on 09-07-2009 13:55:

Originally posted by ivanbag

EDIT: per BI e NV mi è venuto in mente che posso sfruttare l'impostazione che ho dato. All'interno della matrice di strutture che ho creato ho un int che contiene il numero e ho un int che fa da "tag" per le celle già controllate. Quelle ancora non controllate hanno un determinato "tag". Una volta terminate le euristiche è facile scorrere la matrice alla ricerca delle celle non visitate. Da qui si può scegliere se lavorarci direttamente oppure crearsi una struttura esterna ed applicare BI e NV ed eventuali altri controlli...


Ok , anch'io avevo pensato di usare l'int della struct per vedere i numeri che mi rimangono da decidere, i e j che sono gli indici della matrice[i][j] li ho per identificare il numero in questione...in base a questo devo fare la supposizione che sia nero, ma dove la metto sta supposizione????....:?

e non ho ancora capito come fare x la componente connessa, cioè il prof mi ha detto che andrebbe verificata ogni volta che devo decidere se annerire o no una cella.....


Posted by Lallac10 on 09-07-2009 14:06:

Originally posted by ivanbag
Esatto, per ogni euristica richiamo annerire e/o non_annerire. Come dicevo annerire a sua volta richiama euristiche... Un bel macello ^^

Ivan


ora ho un'altra domanda...sull'esempio fornito viene richiamato più volte e di seguito PI che nn rientra nelle euristiche inserite nelle funzioni ricorsive annerire o no


Posted by garfa84 on 09-07-2009 14:16:

si perchè non annerire lo eseguo fin tanto che può essere applicato e siccome nell'esempio quelle chiamate a PI richiamo non_annerire che a sua volta richiama solo una bianco, ma questo non trova niente a annerire, riesegue PI fin quando trova valori che soddisfano l'euristica!!


Posted by ivanbag on 09-07-2009 14:38:

Originally posted by garfa84
Ok , anch'io avevo pensato di usare l'int della struct per vedere i numeri che mi rimangono da decidere, i e j che sono gli indici della matrice[ i ][ j ] li ho per identificare il numero in questione...in base a questo devo fare la supposizione che sia nero, ma dove la metto sta supposizione????....:?


Potresti crearti all'interno della struct (se usi una struct ovvio) una variabile apposita che, se diversa da zero, stai supponendo la cella nera... Ovviamente adattandola al tuo caso.

Originally posted by garfa84
e non ho ancora capito come fare x la componente connessa, cioè il prof mi ha detto che andrebbe verificata ogni volta che devo decidere se annerire o no una cella.....


Ecco, questo è il punto dolente... Le verifiche delle proprietà 1 e 2 sono facili, ma questa... Io sto provando ora a metterle giu tramite grafo... Non ho trovato ancora una soluzione migliore... Se una qualche cella, coppia di celle o insieme di celle non è connessa al resto del grafo la regole 3 non è verificata... Solo è da implementare...

Ciau
Ivan

__________________
Tecum sunt, quae fugis... Seneca


Posted by Lallac10 on 09-07-2009 14:44:

io per la regola 3 ho trattato la matrice come se fosse un grafo testando le prime 2 celle se sono nere e per la prima che non lo è guardo gli adiacenti a croce cioè dx sx su giù e metto le coordinate in una coda poi fino a quando la coda non è vuota faccio lo stesso per tutti gli adiacenti. per capire se ho toccato tutti i nodi ho 2 contatori che mi contano le celle nere e le celle bianche che ho visitato se la loro somma è diversa dal numero di celle totali della griglia allora la griglia non è connessa


EDIT: ho provato a eseguire manualmente la catena di euristiche e arrivati al punto no (2,3)PI li dovrebbe poi applicare SB non di nuovo PI.....se non è così allora non ci ho ancora capito molto


Posted by garfa84 on 09-07-2009 15:06:

si lo esegue SB ma non ci sono valori per cui stampa il messaggio no (x,x) : SB...l'esecuzione avviene sempre dopo non_annerire ma non sempre trova valori!!!

io per la regola 3 ho trattato la matrice come se fosse un grafo testando le prime 2 celle se sono nere e per la prima che non lo è guardo gli adiacenti a croce cioè dx sx su giù e metto le coordinate in una coda poi fino a quando la coda non è vuota faccio lo stesso per tutti gli adiacenti. per capire se ho toccato tutti i nodi ho 2 contatori che mi contano le celle nere e le celle bianche che ho visitato se la loro somma è diversa dal numero di celle totali della griglia allora la griglia non è connessa


ma la regola la controlli sempre?
ma quindi cosa fa nel primo passo vede 0,1 non nera e mette nella coda (0,2)(0,0)(1,0)..e poi controlla i valori nella coda


Posted by Lallac10 on 09-07-2009 15:09:

il primo passo è il controllo di 00 se è nero incremento il contatore nero, e setto 1 il visitato di 00, poi passo a 01 e quello se è bianco controllo a croce e metto quelli non neri nella coda
e così via incrementando per ogni bianco il contatore bianco

non capisco la tua risposta però.....ci sono due numeri uguali su quella riga....eppure la considera dopo molto....boh


Posted by garfa84 on 09-07-2009 15:14:

si ma il PI non_annerisce il 4 e non ci sono 4 sulla stessa riga o colonna..no?!


All times are GMT. The time now is 07:39. Pages (8): « First ... « 2 3 4 5 [6] 7 8 »
Show all 118 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.