Indice del forum
 FAQ   Cerca   Lista utenti   Gruppi   Registrati   Profilo   Messaggi privati   Log in 
Progetto in C per risoluzione di un Hitori (simile al sudoku
Vai a Precedente  1, 2
 
Nuovo argomento   Rispondi    Indice del forum -> Programmazione: c#, c++, Java, HTML, PHP, Javascript...
Precedente :: Successivo  

Autore

Messaggio

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Mer Giu 10, 2009 4:32 pm    Oggetto:

Rispondi citando


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?

Top

Profilo Invia messaggio privato Invia e-mail

garfa
Bravino


Registrato: 09/06/09 15:48
Messaggi: 14

MessaggioInviato: Mer Giu 10, 2009 4:40 pm    Oggetto:

Rispondi citando


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

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Mer Giu 10, 2009 4:46 pm    Oggetto:

Rispondi citando


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).

Top

Profilo Invia messaggio privato Invia e-mail

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Lun Giu 15, 2009 8:32 am    Oggetto:

Rispondi citando


Novità?

Top

Profilo Invia messaggio privato Invia e-mail

garfa
Bravino


Registrato: 09/06/09 15:48
Messaggi: 14

MessaggioInviato: Lun Giu 15, 2009 5:40 pm    Oggetto:

Rispondi citando


...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

Profilo Invia messaggio privato

garfa
Bravino


Registrato: 09/06/09 15:48
Messaggi: 14

MessaggioInviato: Lun Giu 15, 2009 5:47 pm    Oggetto:

Rispondi citando


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

Profilo Invia messaggio privato

cali1981
Site Admin


Registrato: 16/01/06 22:01
Messaggi: 843

MessaggioInviato: Lun Giu 15, 2009 7:20 pm    Oggetto:

Rispondi citando


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;
}

Top

Profilo Invia messaggio privato Invia e-mail

garfa
Bravino


Registrato: 09/06/09 15:48
Messaggi: 14

MessaggioInviato: Lun Giu 22, 2009 4:08 pm    Oggetto:

Rispondi citando


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

Profilo Invia messaggio privato

cooperativasolaris
Novizio


Registrato: 18/01/11 09:57
Messaggi: 8

MessaggioInviato: Lun Mar 28, 2011 10:17 am    Oggetto:

Rispondi citando


grazie per le informazioni, sono state molto utili

Top

Profilo Invia messaggio privato

Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione: c#, c++, Java, HTML, PHP, Javascript... Tutti i fusi orari sono GMT
Vai a Precedente  1, 2
Pagina 2 di 2

 
Vai a:  
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
Forum del sito TuttoMontefalco.it - Umbria - Italy topic RSS feed 


Torna al sito TuttoMontefalco.it


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it

SoftGreen 1.1 phpBB theme by DaTutorials.com
Copyright © DaTutorials 2005