 |
|
 |
| Precedente :: Successivo |
Autore |
Messaggio |
|
|
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
Inviato: Mer Giu 10, 2009 4:32 pm Oggetto: |
|
|
Secondo me devi solo creare una struttura che contiene il valore della cella e gli indici. E poi crei gli operatori < > e = sulla struttura. Ma, una domanda: l'albero serve poi per risolvere il gioco? _________________ Visita anche il sito Agriturismo Umbria per maggiori informazioni sull'Umbria!
Realizzazione siti web e applicazioni ASp.NEt, C/C++, C# |
|
Top |
|
 |
garfa Bravino
Registrato: 09/06/09 15:48 Messaggi: 14
|
Inviato: Mer Giu 10, 2009 4:40 pm Oggetto: |
|
|
perchè <> e = cosa mi servirebbero?!
si l'albero serve per verificare le proprietà che deve soddisfare il gioco, per fare questo bisogna implementare delle tecniche di risoluzione:
le 4 principali sono
[SB] Solo un bianco
Se si stabilisce che una casella non può essere
annerita, e nella stessa riga o nella stessa
colonna si trova un altro numero uguale, allora
questo deve essere annerito (altrimenti la
regola 1 non sarebbe rispettata).
[NV] Nero vicino
Una volta annerita una casella, ne deriva che
tutte le altre ad essa adiacenti non potranno
essere annerite (per la regola 2).
[A] Angolo
Se è stata annerita una casella vicino ad un
angolo della griglia, allora una casella adiacente
in diagonale non può essere annerita
(altrimenti la casella nell’angolo resterebbe
isolata, contro la regola 3).
[PI] Panino imbottito
Se un numero si trova tra due numeri uguali,
allora non può essere annerito (se venisse
annerito, entrambi i suoi vicini non potrebbero
essere anneriti per la regola 2, quindi
avremmo un numero ripetuto nella stessa
riga/colonna, contraddicendo la regola 3). |
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
Inviato: Mer Giu 10, 2009 4:46 pm Oggetto: |
|
|
Il <>= ti serve perchè se vedi nel codice c'è typedef int key, se tu invece di int ci metti una struttura, devi creare gli operatori che poi vengono usati per la crezione e il controllo all'interno dell'albero. Mentre l'int ovviamente è un tipo base e gli operatori <>= ce li ha, la tua struttura no, e se la sostituisci all'int devi fare l'overload degli operatori per permettere al sistema di funzionare. Forse te ne servono anche altri di operatori (anche quello di uguaglianza credo, == >= <=, una volta fatto uno il resto è facile). _________________ Visita anche il sito Agriturismo Umbria per maggiori informazioni sull'Umbria!
Realizzazione siti web e applicazioni ASp.NEt, C/C++, C# |
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
|
Top |
|
 |
garfa Bravino
Registrato: 09/06/09 15:48 Messaggi: 14
|
Inviato: Lun Giu 15, 2009 5:40 pm Oggetto: |
|
|
...sono stato un attimo impegnato in questi giorni adesso mi rimetto al lavoro!!!...ti prego ho bisogno di una mano devo consegnarlo assolutamente entro il 13 luglio......o se riesco entro il 22 giugno il che è quasi impossibile!!!
grazie x l'aiuto fino adesso.. |
|
Top |
|
 |
garfa Bravino
Registrato: 09/06/09 15:48 Messaggi: 14
|
Inviato: Lun Giu 15, 2009 5:47 pm Oggetto: |
|
|
potrebbe essere una cosa del genere per il < >
| Codice: |
cella *tmin(cella *p, profilo *nil){
for(;p->left != nil;p = p->left);
return p;
}
cella *tmax(cella *p, cella *nil){
for(;p->right != nil;p = p->right);
return p;
}
cella *alberomin(alberocelle *r){
return tmin(r->root,r->nil);
}
cella *alberomax(alberocelle *r){
return tmax(r->root,r->nil);
}
|
|
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
Inviato: Lun Giu 15, 2009 7:20 pm Oggetto: |
|
|
Non capisco a cosa servano, per fare l'overloading di operatori devi fare qualcosa del tipo:
| Codice: |
struct Structure
{
int n;
};
Structure operator =(Structure &ss1)
{
struct Structure ss2;
ss2.n = ss1.n;
return ss2;
} |
Ad esempio questo fa l'orveloading di =. Nel tuo caso dovrai fare:
| Codice: |
bool operator >(Structure &ss1)
{
return this-> n > ss1->n;
} |
_________________ Visita anche il sito Agriturismo Umbria per maggiori informazioni sull'Umbria!
Realizzazione siti web e applicazioni ASp.NEt, C/C++, C# |
|
Top |
|
 |
garfa Bravino
Registrato: 09/06/09 15:48 Messaggi: 14
|
Inviato: Lun Giu 22, 2009 4:08 pm Oggetto: |
|
|
Ho modificato decisamente l'intenzione sul progetto, e lo sto cercando di risolvere tramite matrici,
questo è il codice:
| Codice: |
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef int** TMatrice; /* tipo matrice, vettore di puntatori */
/*============================ Dichiarazione delle funzioni (prototipi) ===============================*/
TMatrice alloca_matrice(int n); /* Alloca memoria per una matrice */
void libera_matrice(TMatrice *matrice, int n); /* Libera la memoria allocata */
void inserimento(TMatrice matrice, int n);
void stampa_matrice (TMatrice matrice , int n);
void panino_imbottitorighe(TMatrice matrice, int n);
void panino_imbottitocolonne(TMatrice matrice, int n);
/*=====================================================================================================*/
/*==================== MAIN ===================== */
int main()
{
TMatrice matrice;
int n;
printf("Dimensione griglia?\n");
scanf("%d" , &n);
matrice = alloca_matrice(n);
inserimento(matrice, n);
panino_imbottitorighe(matrice,n);
panino_imbottitocolonne(matrice,n);
printf("\n");
stampa_matrice(matrice, n);
libera_matrice(&matrice, n);
return 0;
}
/*
Alloca la memoria per una matrice di dimensione n e ne restituisce
un puntatore.
*/
TMatrice alloca_matrice(int n)
{
TMatrice matrice;
int i;
/* alloco il vettore delle righe. Ogni elemento di questo vettore è un puntatore */
if(!(matrice = (TMatrice) malloc (n * sizeof(int *)))) {
fprintf(stderr,"Errore di allocazione per la matrice\n");
return 0;
}
/* per ogni riga alloco le colonne */
for (i=0; i<n; i++) {
if(!(matrice[i] = (int *) malloc (n * sizeof(int)))) {
fprintf(stderr,"Errore di allocazione per la i-esima posizione \"%d\"\n",i);
return 0;
}
}
return matrice;
}
/* Libera la memoria allocata da alloca_matrice */
void libera_matrice(TMatrice *matrice, int n)
{
int i;
for (i=0; i<n; i++)
free((*matrice)[i]);
free(*matrice);
}
/* Inserimento dei valori all'interno della matrice*/
void inserimento(TMatrice matrice, int n){
int i,j;
for(i=0 ; i<n ; i++)
for(j=0 ; j<n ; j++)
{
scanf("%d",&matrice[i][j]);
}
printf("\n");
}
/* stampa del risultato della matrice */
/* in realtà alla fine dovrà stampare la metrice con degli zero che corrispondono alle caselle annerite*/
void stampa_matrice(TMatrice matrice, int n){
int i,j;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%d ", matrice[i][j]);
printf("\n");
}
}
/*===================== implementazione dell tecniche di risoluzione ================*/
/* numero non annerito = -1- */
/* numero annerito = *1* */
/* numero che non si sa ancora se annerito o no = 1 */
/* [PI] PANINO IMBOTIITO*/
void panino_imbottitorighe(TMatrice matrice, int n) {
int i,j;
for (i=0; i<n; i++)
for(j=0; (j+2)<n; j++)
if(matrice[i][j] == matrice[i][j+2]) /* controlla se i valori inseriti sono uguali sulle righe*/
printf("%s%d%s%d%s", "no (" , i , ", " , j+1,") : PI\n");
}
void panino_imbottitocolonne(TMatrice matrice, int n){
int i,j;
for(j=0; j<n; j++)
for(i=0;(i+2)<n;i++)
if(matrice[i][j] == matrice[i+2][j]) /* controlla se i valori inseriti sono uguali sulle colonne*/
printf("%s%d%s%d%s", "no (" , i+1 , ", " , j,") : PI\n");
}
|
Adesso mi sono un po bloccato sull'implementazione di una funzione che devo trovare eventuali valori uguali su righe e colonne dopo aver eseguito la funzioni PI.
Cioè se trovo valori uguali a un numero che non deve essere annerito sulla stessa riga e stessa colonna questi vanno anneriti. (si chiama : SB)
Tra l'altro servirebbe una funzione annerisci e una non_annerire che devo vedere come fare. |
|
Top |
|
 |
cooperativasolaris Novizio
Registrato: 18/01/11 09:57 Messaggi: 8
|
Inviato: Lun Mar 28, 2011 10:17 am Oggetto: |
|
|
grazie per le informazioni, sono state molto utili |
|
Top |
|
 |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|