• Sábado 14 de Diciembre de 2024, 20:22

Autor Tema:  Necesito Ayuda A La Hora De Mostrar Resultados  (Leído 702 veces)

dgckero

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Necesito Ayuda A La Hora De Mostrar Resultados
« en: Domingo 3 de Junio de 2007, 17:34 »
0
:hola:  vereis tengo una pequeña duda a la hora de mostrar un resultado de un método basado en la técnica de backtracking(vuelta atras), el método es el siguiente:

void Elecciones(int etapa, TCand *candidato1, TCand *candidato2, int cand, TPueblo *l_pueblos,int n_dias,int n_pueblos, TPos *pos){
    int votos=0;
    int aux_c,i;
    TPos PosDejamos;
    int visit = TRUE;
    if(etapa==n_dias){
        if(candidato1->num_votos > candidato2->num_votos)                
            *pos = GANADORA;
        else if(candidato1->num_votos < candidato2->num_votos)
            *pos = PERDEDORA;
        else
            *pos = TABLAS;
    }/*fin if*/
    else{
        *pos = PERDEDORA;
        for(i=0; i<n_pueblos && *pos!=GANADORA; i++){
            if(!candidato1->pueblos){/*Si no ha pasado antes por ese pueblo*/
               /*Si ya ha sido visitado por el otro candidato solo nos darán un tercio
                 de los votos que nos darían si fuesemos los primeros*/
                if(l_pueblos.visitado){
                   votos =(l_pueblos.votos[cand]/3);
                   visit = FALSE;
                }
                else
                   votos = l_pueblos.votos[cand];
                /*DAMOS EL MITIN EN ESE PUEBLO*/
                l_pueblos.visitado = TRUE;  
                candidato1->pueblos = TRUE;
                candidato1->num_votos += votos;
                /*Ahora le toca el turno al otro candidato*/
                if(cand == 0)
                   aux_c = 1;
                else
                   aux_c = 0;
                Elecciones(etapa+1,candidato2,candidato1,aux_c,l_pueblos,n_dias,n_pueblos,&PosDejamos);
                if(PosDejamos!=GANADORA){
                   if(PosDejamos == PERDEDORA) *pos = GANADORA;
                   else *pos = TABLAS;                                      
                }                  
                /*DESHACER*/
                if(!visit)/*Si no había sido visitado por el otro candidato*/
                   l_pueblos.visitado = FALSE;  
                candidato1->pueblos = FALSE;
                candidato1->num_votos -= votos;                    
            }    
        }      
    }
         
}


Tengo además las siguientes estructuras:

typedef struct{
   int votos[2];
   int visitado;        
}TPueblo;

typedef struct{
   int num_votos;
   int pueblos[MAX];
}TCand;

typedef enum{ PERDEDORA, GANADORA, TABLAS }TPos;


En mi método main lo llamo de la siguiente forma:

  Elecciones(0,&candidato1,&candidato2,0,pueblos,n_dias,n_pueblos,&pos);

Mi problema es que una vez hecha la llamada cuando despues quiero mostrar los datos de candidato1 y candidato2(num_votos y pueblos[]) están a cero, siendo que lo que tienen que mostrar son los n_votos que han obtenido en el método Elecciones y los pueblos que se pusieron a TRUE en el método Elecciones. Por más vueltas que le doy no se que más hacer, si alguien me pudiese echar una mano se lo agradecería mucho, muchas gracias.