Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema para pensar 2 Parte....

Estas en el tema de Problema para pensar 2 Parte.... en el foro de Programación General en Foros del Web. Buenas Tardes a todos...... el siguiente es un problema que me tiene cabezon de tanto darle y darle vueltas y no poder resolverlo, asi que ...
  #1 (permalink)  
Antiguo 02/12/2003, 12:39
Avatar de McManaman  
Fecha de Ingreso: agosto-2003
Ubicación: Ecuador - Guayaquil
Mensajes: 119
Antigüedad: 20 años, 7 meses
Puntos: 0
Problema para pensar 2 Parte....

Buenas Tardes a todos...... el siguiente es un problema que me tiene cabezon de tanto darle y darle vueltas y no poder resolverlo, asi que quizas con ideas de ustedes me podrian ayudar a resolverlo ..... El problema es el siguiente:

Tengo 5 categorias y 20 grupo de personas (5 columnas y 20 filas) ....... o sea 100 personas(5 personas por grupo), lo dificil de esto es que necesito generar un cuadro en el cual me baraja a las 100 personas y me las coloca por grupo de 5 personas, hasta completar los 20 grupos, pero estos deben ser generados de una manera tal que al hacerlo (se genera automaticamente por 20 dias) estos no deben que toparse en ninguno de los siguientes 19 dias.....me explico???? si juan y pedro estuvieron juntos en el dia 2 por ejemplo, en ninguno de los siguientes 18 dias(porque son 20 dias) deben toparse otra vez una vez que han pasado los 20 dias ahi si pueden volverse a topar en cualquiera de los siguientes 20 dias ...... a continuacion pongo un codigo con el cual me ayudo bastante leonardop(y le agradezco muchisimo por su ayuda), pero este no me funciona(debido a la validacion) con 20 personas, solo me funciona con 19 y de ahi funciona con 23, de ahi con 25 de ahi con 29 etc etc etc (hay una secuencia de funcionamiento de 4 - 2), aqui les pongo el codigo que me dio por si acaso alguien me ayuda a hacer que funcione con 20 personas, pero con las validaciones antes mencionadas, porque si al codigo de leonardop le quito las validaciones este si me genera el cuadro pero con gente que se topa muy seguido ..... gracias a todos chaup...........

<?php

/*** Variables personalizables ***/

$n_grupos = 5; // Numero de grupos
$n_personas = 19; // Numero de personas por grupo



/*** Creacion de los datos del programa ***/

$personas = array ();

for ($i = 1; $i <= $n_grupos; $i++) {
$matriz = "p$i"; // Nombre de cada matriz de personas
$personas[$matriz] = array ();

for ($j = 1; $j <= $n_personas; $j++) {
$persona = "persona$i-$j"; // Nombre de cada persona
$personas[$matriz][] = $persona;
}
}



/*** Mostrar el listado de personas ***/

echo <<<FIN
<h3>Existen los siguientes grupos de personas:</h3>
<table>
<tr>
FIN;

for ($i = 1; $i <= $n_grupos; $i++)
echo " <th>p$i</th>\n";

echo " </tr>\n";

for ($i = 0; $i < $n_personas; $i++) {
echo " <tr>\n";

for ($j = 1; $j <= $n_grupos; $j++)
echo ' <td>' . $personas["p$j"][$i] . "</td>\n";

echo " </tr>\n";
}

echo "</table>\n";



/*** Calcular la distribucion de las personas en los carros ***/

$dias = array ();
$personas_cruzadas = array ();
$indices = array (0, 0, 0, 0, 0);

for ($dia = 0; $dia < $n_personas; $dia++) {
$dias[$dia] = array ();

$personas_acomodadas = array ();

for ($carro = 0; $carro < $n_personas; $carro++) {
$dias[$dia][$carro] = array ();


for ($grupo = 0; $grupo < $n_grupos; $grupo++) {
$persona_fue_elegida = false;

$indice = $indices[$grupo] + $carro;
if ($indice >= $n_personas)
$indice %= $n_personas;

$persona = &$personas['p' . ($grupo + 1)][$indice];

// Chequear si la persona actual ya se ha cruzado con
// alguno de los pasajeros ya asignados a este carro

$se_ha_cruzado = false;

if (array_key_exists ($persona, $personas_cruzadas)) {

for ($i = 0; $i < $grupo; $i++) {

if (in_array ($dias[$dia][$carro][$i],
$personas_cruzadas[$persona])) {

$se_ha_cruzado = true;
break;
}
}
}


if (! in_array ($persona, $personas_acomodadas) and
! $se_ha_cruzado) {

$persona_fue_elegida = true;

$dias[$dia][$carro][] = $personas_acomodadas[] = $persona;
}

if (! $persona_fue_elegida) {
echo '<p>No es posible acomodar a las personas en los ' .
"carros según los requerimientos.</p>\n";

exit (1);
}
}

// Llevar el registro de los pasajeros que se han reunido en
// el carro

for ($i = 0; $i < $n_grupos; $i++) {
for ($j = 0; $j < $n_grupos; $j++) {
if ($i != $j)
$personas_cruzadas[$dias[$dia][$carro][$i]][] =
$dias[$dia][$carro][$j];
}
}

}

for ($i = 0, $inc = 1; $i < $n_grupos; $i++, $inc++)
$indices[$i] = (($indices[$i] + $inc >= $n_personas) ?
(($indices[$i] + $inc) % $n_personas) :
($indices[$i] + $inc));
}



/*** Imprimir los resultados ***/

echo "<h3>Resultados de la ubicación de personas en los carros:</h3>\n";

for ($dia = 0; $dia < $n_personas; $dia++) {
$dia_num = $dia + 1;

echo <<<FIN
<table>
<caption>Día $dia_num</caption>
<tr>
<th>Carro</th>
<th colspan="$n_grupos">Pasajeros</th>
</tr>
FIN;

for ($carro = 0; $carro < $n_personas; $carro++) {
echo " <tr>\n <td>" . ($carro + 1) . "</td>\n";

for ($pasajero = 0; $pasajero < $n_grupos; $pasajero++)
echo ' <td>' . $dias[$dia][$carro][$pasajero] . "</td>\n";

echo " </tr>\n";
}


echo "</table>\n<br />\n";
}

?>
__________________
...Hay unos que saben TODO de nada y otros que saben NADA de TODO... think about it
  #2 (permalink)  
Antiguo 02/12/2003, 17:45
Avatar de McManaman  
Fecha de Ingreso: agosto-2003
Ubicación: Ecuador - Guayaquil
Mensajes: 119
Antigüedad: 20 años, 7 meses
Puntos: 0
leonardoooooooooooooooooooooooooopppp
__________________
...Hay unos que saben TODO de nada y otros que saben NADA de TODO... think about it
  #3 (permalink)  
Antiguo 03/12/2003, 09:15
Avatar de McManaman  
Fecha de Ingreso: agosto-2003
Ubicación: Ecuador - Guayaquil
Mensajes: 119
Antigüedad: 20 años, 7 meses
Puntos: 0
pleaaasseeeee ayuuuuuuudaaaaaaaa
__________________
...Hay unos que saben TODO de nada y otros que saben NADA de TODO... think about it
  #4 (permalink)  
Antiguo 04/12/2003, 08:49
Avatar de McManaman  
Fecha de Ingreso: agosto-2003
Ubicación: Ecuador - Guayaquil
Mensajes: 119
Antigüedad: 20 años, 7 meses
Puntos: 0
__________________
...Hay unos que saben TODO de nada y otros que saben NADA de TODO... think about it
  #5 (permalink)  
Antiguo 05/12/2003, 14:23
Avatar de McManaman  
Fecha de Ingreso: agosto-2003
Ubicación: Ecuador - Guayaquil
Mensajes: 119
Antigüedad: 20 años, 7 meses
Puntos: 0
help
__________________
...Hay unos que saben TODO de nada y otros que saben NADA de TODO... think about it
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:03.