Recoger todos los nodos a su alcance

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Julio 21st, 2010, 11:44 am

Ive consiguió una serie de nodos interconectados que se parece a esto.

Attachments:
node-connections.gif


La representación que tengo de estos nodos en PHP es similar a esto. Cuando cada nodo tiene una clave de la matriz, que se asocia con una serie de teclas nodo conectado.

PHP Código: [ Select ]
$nodes = array(
   'a'   => array('b', 'c'),
   'b'   => array('a', 'c', 'd'),
   'c'   => array('a', 'b', 'd'),
   'd'   => array('b', 'c', 'e'),
   'e'   => array('d')
);
  1. $nodes = array(
  2.    'a'   => array('b', 'c'),
  3.    'b'   => array('a', 'c', 'd'),
  4.    'c'   => array('a', 'b', 'd'),
  5.    'd'   => array('b', 'c', 'e'),
  6.    'e'   => array('d')
  7. );


Lo que me gustaría hacer, se le da una clave K para el retorno punto de partida SP, y un número N de la máxima "saltos", un conjunto de K que están dentro del N salta de SP.

Actualmente estoy utilizando la siguiente, que básicamente cuenta regresiva de N y se funde todo lo relacionado a la K ya en la matriz resultado hasta N es cero.

PHP Código: [ Select ]
$maxJumps = 1;
$withinReach[] = 'a';
 
while($maxJumps)
{
   $_withinReach = $withinReach;
   foreach($_withinReach as $nodeID)
   {
      $withinReach = array_unique(array_merge($withinReach, $nodes[$nodeID]));
   }
   $maxJumps--;
}
  1. $maxJumps = 1;
  2. $withinReach[] = 'a';
  3.  
  4. while($maxJumps)
  5. {
  6.    $_withinReach = $withinReach;
  7.    foreach($_withinReach as $nodeID)
  8.    {
  9.       $withinReach = array_unique(array_merge($withinReach, $nodes[$nodeID]));
  10.    }
  11.    $maxJumps--;
  12. }


Devuelve resultados. Para un salto devuelve los nodos de espera. Sin embargo, su un poco desalentador comprobar si devuelve los resultados correctos durante más de un salto, porque los resultados crecen muy rápido. Fuera de la parte superior de mi cabeza, yo también puedo decir que debo optimizar esta de alguna manera para que cada iteración del bucle while no continuamente re-revisar los nódulos pasado.

Todas y cada una de entrada [] constructiva es bienvenida. Si te estás preguntando qué es esto, el conjunto de datos Im usando es el mapSolarSystemJumps "" tabla de volcado de la base de datos onlines Eva. :D
Strong with this one, the sudo is.
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Julio 21st, 2010, 11:44 am

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Julio 21st, 2010, 1:06 pm

Me cambié a los siguientes ciclos. El código anterior el tiempo de espera después de 30 segundos con $ maxJumps establece en 20, mientras que este nuevo código se encuentra alrededor de 1200 nodos dentro de alcance de 20 saltos en una segunda parte superior. (Incluyendo el tiempo que toma para crear la página y mi navegador para que lo haga)

PHP Código: [ Select ]
$_withinReach = array('a' => new stdClass);
while($maxJumps--)
{
   foreach($_withinReach as $key => $val)
   {
      foreach($nodes[$key] as $_key)
      {
         $withinReach[$_key] = new stdClass;
      }
   }
   $_withinReach = array_diff_key($withinReach, $_withinReach);
}
unset($_withinReach);
  1. $_withinReach = array('a' => new stdClass);
  2. while($maxJumps--)
  3. {
  4.    foreach($_withinReach as $key => $val)
  5.    {
  6.       foreach($nodes[$key] as $_key)
  7.       {
  8.          $withinReach[$_key] = new stdClass;
  9.       }
  10.    }
  11.    $_withinReach = array_diff_key($withinReach, $_withinReach);
  12. }
  13. unset($_withinReach);
Strong with this one, the sudo is.
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de Usuario
  • Registrado: Sep 22, 2003
  • Mensajes: 6128
  • Loc: Seattle, WA
  • Status: Offline

Nota Julio 21st, 2010, 1:12 pm

Gráfico problemas de este tipo son mucho más fácil si se trabaja dentro de la teoría de grafos tradicional, es decir, los dos vértices de etiquetado y bordes. A continuación, asociando cada vértice con sus vecinos y la búsqueda de caminos, paseos, y los lazos se vuelve mucho más simple.
The Beer Monocle. Classy.
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Julio 21st, 2010, 1:22 pm

Usted fue a la derecha sobre mi cabeza con esa respuesta. ¿Puede mostrarme un ejemplo rápido de lo que quieres decir, mediante el etiquetado vértices y aristas? :D
Strong with this one, the sudo is.
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de Usuario
  • Registrado: Sep 22, 2003
  • Mensajes: 6128
  • Loc: Seattle, WA
  • Status: Offline

Nota Julio 21st, 2010, 1:41 pm

Claro:

Un vértice (Plural: vértices) es un punto en un gráfico. Las líneas que los unen son llamados bordes . Si tuviera que dar un identificador único para todos los vértices (es decir, V1, V2, etc) y en todos los bordes (es decir, e1, e2, etc), entonces usted puede modelar el gráfico como un conjunto de vértices, cada uno con una colección de aristas.

Attachments:
graph.png


En el ejemplo anterior, tenemos un gráfico que contiene 5 vértices y aristas 5. Podemos dar a cada vértice de una colección de aristas. Usamos la notación E (vi) para decir "la colección de aristas que" vi "como criterio de valoración:

Código: [ Select ]
E(v1) = [e1, e2]
E(v2) = [e2, e3]
E(v3) = [e1, e4]
E(v4) = [e3, e4, e5]
E(v5) = [e5]
  1. E(v1) = [e1, e2]
  2. E(v2) = [e2, e3]
  3. E(v3) = [e1, e4]
  4. E(v4) = [e3, e4, e5]
  5. E(v5) = [e5]


Ahora, para buscar todos los nodos que son una serie de saltos de distancia, nosotros sólo el nodo de inicio, iterar a través de su lista de bordes para agarrar a los vecinos del vértice, y repetir hasta que fueron lo suficientemente lejos.

El beneficio real de esto se puede ver si el programa de este de una manera orientada a objetos, donde los vértices y aristas son todos los objetos.
The Beer Monocle. Classy.
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de Usuario
  • Registrado: Sep 22, 2003
  • Mensajes: 6128
  • Loc: Seattle, WA
  • Status: Offline

Nota Julio 21st, 2010, 1:48 pm

Por supuesto, si usted está en el álgebra matricial, puede ejecutar algoritmos cada vez más loco en la matriz de adyacencia del grafo para obtener aún más información.

Attachments:
adjacency_matrix.png
The Beer Monocle. Classy.
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Julio 21st, 2010, 3:55 pm

Por el momento los dos únicos resultados que necesito de estos datos son el conjunto estoy trabajando ahora, siendo el conjunto que me dice que los sistemas que están dentro de N saltos de cualquier sistema dado, y el camino más corto entre dos sistemas, que ya tengo de trabajo.

Aquí están las tablas que tengo que trabajar. La tabla con la que trabajo principalmente es la tabla mapSolarSystemJumps, que tiene 14.334 filas.

SQL Código: [ Select ]
CREATE TABLE `mapSolarSystems` (
  `regionID` int(11) DEFAULT NULL,
  `constellationID` int(11) DEFAULT NULL,
  `solarSystemID` int(11) NOT NULL,
  `solarSystemName` varchar(100) DEFAULT NULL,
  `x` double DEFAULT NULL,
  `y` double DEFAULT NULL,
  `z` double DEFAULT NULL,
  `xMin` double DEFAULT NULL,
  `xMax` double DEFAULT NULL,
  `yMin` double DEFAULT NULL,
  `yMax` double DEFAULT NULL,
  `zMin` double DEFAULT NULL,
  `zMax` double DEFAULT NULL,
  `luminosity` double DEFAULT NULL,
  `border` tinyint(1) DEFAULT NULL,
  `fringe` tinyint(1) DEFAULT NULL,
  `corridor` tinyint(1) DEFAULT NULL,
  `hub` tinyint(1) DEFAULT NULL,
  `international` tinyint(1) DEFAULT NULL,
  `regional` tinyint(1) DEFAULT NULL,
  `constellation` tinyint(1) DEFAULT NULL,
  `security` double DEFAULT NULL,
  `factionID` int(11) DEFAULT NULL,
  `radius` double DEFAULT NULL,
  `sunTypeID` smallint(6) DEFAULT NULL,
  `securityClass` varchar(2) DEFAULT NULL,
  PRIMARY KEY  (`solarSystemID`),
  UNIQUE KEY `solarSystemID` (`solarSystemID`,`constellationID`,`regionID`),
  KEY `mapSolarSystems_IX_constellation` (`constellationID`),
  KEY `mapSolarSystems_IX_region` (`regionID`),
  KEY `mapSolarSystems_IX_security` (`security`),
  KEY `factionID` (`factionID`),
  KEY `sunTypeID` (`sunTypeID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  1. CREATE TABLE `mapSolarSystems` (
  2.   `regionID` int(11) DEFAULT NULL,
  3.   `constellationID` int(11) DEFAULT NULL,
  4.   `solarSystemID` int(11) NOT NULL,
  5.   `solarSystemName` varchar(100) DEFAULT NULL,
  6.   `x` double DEFAULT NULL,
  7.   `y` double DEFAULT NULL,
  8.   `z` double DEFAULT NULL,
  9.   `xMin` double DEFAULT NULL,
  10.   `xMax` double DEFAULT NULL,
  11.   `yMin` double DEFAULT NULL,
  12.   `yMax` double DEFAULT NULL,
  13.   `zMin` double DEFAULT NULL,
  14.   `zMax` double DEFAULT NULL,
  15.   `luminosity` double DEFAULT NULL,
  16.   `border` tinyint(1) DEFAULT NULL,
  17.   `fringe` tinyint(1) DEFAULT NULL,
  18.   `corridor` tinyint(1) DEFAULT NULL,
  19.   `hub` tinyint(1) DEFAULT NULL,
  20.   `international` tinyint(1) DEFAULT NULL,
  21.   `regional` tinyint(1) DEFAULT NULL,
  22.   `constellation` tinyint(1) DEFAULT NULL,
  23.   `security` double DEFAULT NULL,
  24.   `factionID` int(11) DEFAULT NULL,
  25.   `radius` double DEFAULT NULL,
  26.   `sunTypeID` smallint(6) DEFAULT NULL,
  27.   `securityClass` varchar(2) DEFAULT NULL,
  28.   PRIMARY KEY  (`solarSystemID`),
  29.   UNIQUE KEY `solarSystemID` (`solarSystemID`,`constellationID`,`regionID`),
  30.   KEY `mapSolarSystems_IX_constellation` (`constellationID`),
  31.   KEY `mapSolarSystems_IX_region` (`regionID`),
  32.   KEY `mapSolarSystems_IX_security` (`security`),
  33.   KEY `factionID` (`factionID`),
  34.   KEY `sunTypeID` (`sunTypeID`)
  35. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


SQL Código: [ Select ]
CREATE TABLE `mapSolarSystemJumps` (
  `fromRegionID` int(11) DEFAULT NULL,
  `fromConstellationID` int(11) DEFAULT NULL,
  `fromSolarSystemID` int(11) NOT NULL,
  `toSolarSystemID` int(11) NOT NULL,
  `toConstellationID` int(11) DEFAULT NULL,
  `toRegionID` int(11) DEFAULT NULL,
  PRIMARY KEY  (`fromSolarSystemID`,`toSolarSystemID`),
  KEY `mapSolarSystemJumps_IX_fromConstellation` (`fromConstellationID`),
  KEY `mapSolarSystemJumps_IX_fromRegion` (`fromRegionID`),
  KEY `fromSolarSystemID` (`fromSolarSystemID`,`fromConstellationID`,`fromRegionID`),
  KEY `toSolarSystemID` (`toSolarSystemID`,`toConstellationID`,`toRegionID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  1. CREATE TABLE `mapSolarSystemJumps` (
  2.   `fromRegionID` int(11) DEFAULT NULL,
  3.   `fromConstellationID` int(11) DEFAULT NULL,
  4.   `fromSolarSystemID` int(11) NOT NULL,
  5.   `toSolarSystemID` int(11) NOT NULL,
  6.   `toConstellationID` int(11) DEFAULT NULL,
  7.   `toRegionID` int(11) DEFAULT NULL,
  8.   PRIMARY KEY  (`fromSolarSystemID`,`toSolarSystemID`),
  9.   KEY `mapSolarSystemJumps_IX_fromConstellation` (`fromConstellationID`),
  10.   KEY `mapSolarSystemJumps_IX_fromRegion` (`fromRegionID`),
  11.   KEY `fromSolarSystemID` (`fromSolarSystemID`,`fromConstellationID`,`fromRegionID`),
  12.   KEY `toSolarSystemID` (`toSolarSystemID`,`toConstellationID`,`toRegionID`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


SQL Código: [ Select ]
CREATE TABLE `mapRegions` (
  `regionID` int(11) NOT NULL,
  `regionName` varchar(100) DEFAULT NULL,
  `x` double DEFAULT NULL,
  `y` double DEFAULT NULL,
  `z` double DEFAULT NULL,
  `xMin` double DEFAULT NULL,
  `xMax` double DEFAULT NULL,
  `yMin` double DEFAULT NULL,
  `yMax` double DEFAULT NULL,
  `zMin` double DEFAULT NULL,
  `zMax` double DEFAULT NULL,
  `factionID` int(11) DEFAULT NULL,
  `radius` double DEFAULT NULL,
  PRIMARY KEY  (`regionID`),
  KEY `factionID` (`factionID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  1. CREATE TABLE `mapRegions` (
  2.   `regionID` int(11) NOT NULL,
  3.   `regionName` varchar(100) DEFAULT NULL,
  4.   `x` double DEFAULT NULL,
  5.   `y` double DEFAULT NULL,
  6.   `z` double DEFAULT NULL,
  7.   `xMin` double DEFAULT NULL,
  8.   `xMax` double DEFAULT NULL,
  9.   `yMin` double DEFAULT NULL,
  10.   `yMax` double DEFAULT NULL,
  11.   `zMin` double DEFAULT NULL,
  12.   `zMax` double DEFAULT NULL,
  13.   `factionID` int(11) DEFAULT NULL,
  14.   `radius` double DEFAULT NULL,
  15.   PRIMARY KEY  (`regionID`),
  16.   KEY `factionID` (`factionID`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


SQL Código: [ Select ]
CREATE TABLE `mapRegionJumps` (
  `fromRegionID` int(11) NOT NULL,
  `toRegionID` int(11) NOT NULL,
  PRIMARY KEY  (`fromRegionID`,`toRegionID`),
  KEY `toRegionID` (`toRegionID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  1. CREATE TABLE `mapRegionJumps` (
  2.   `fromRegionID` int(11) NOT NULL,
  3.   `toRegionID` int(11) NOT NULL,
  4.   PRIMARY KEY  (`fromRegionID`,`toRegionID`),
  5.   KEY `toRegionID` (`toRegionID`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


SQL Código: [ Select ]
CREATE TABLE `mapConstellations` (
  `regionID` int(11) DEFAULT NULL,
  `constellationID` int(11) NOT NULL,
  `constellationName` varchar(100) DEFAULT NULL,
  `x` double DEFAULT NULL,
  `y` double DEFAULT NULL,
  `z` double DEFAULT NULL,
  `xMin` double DEFAULT NULL,
  `xMax` double DEFAULT NULL,
  `yMin` double DEFAULT NULL,
  `yMax` double DEFAULT NULL,
  `zMin` double DEFAULT NULL,
  `zMax` double DEFAULT NULL,
  `factionID` int(11) DEFAULT NULL,
  `radius` double DEFAULT NULL,
  PRIMARY KEY  (`constellationID`),
  UNIQUE KEY `constellationID` (`constellationID`,`regionID`),
  KEY `mapConstellations_IX_region` (`regionID`),
  KEY `factionID` (`factionID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
  1. CREATE TABLE `mapConstellations` (
  2.   `regionID` int(11) DEFAULT NULL,
  3.   `constellationID` int(11) NOT NULL,
  4.   `constellationName` varchar(100) DEFAULT NULL,
  5.   `x` double DEFAULT NULL,
  6.   `y` double DEFAULT NULL,
  7.   `z` double DEFAULT NULL,
  8.   `xMin` double DEFAULT NULL,
  9.   `xMax` double DEFAULT NULL,
  10.   `yMin` double DEFAULT NULL,
  11.   `yMax` double DEFAULT NULL,
  12.   `zMin` double DEFAULT NULL,
  13.   `zMax` double DEFAULT NULL,
  14.   `factionID` int(11) DEFAULT NULL,
  15.   `radius` double DEFAULT NULL,
  16.   PRIMARY KEY  (`constellationID`),
  17.   UNIQUE KEY `constellationID` (`constellationID`,`regionID`),
  18.   KEY `mapConstellations_IX_region` (`regionID`),
  19.   KEY `factionID` (`factionID`)
  20. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  21.  


SQL Código: [ Select ]
CREATE TABLE `mapConstellationJumps` (
  `fromRegionID` int(11) DEFAULT NULL,
  `fromConstellationID` int(11) NOT NULL,
  `toConstellationID` int(11) NOT NULL,
  `toRegionID` int(11) DEFAULT NULL,
  PRIMARY KEY  (`fromConstellationID`,`toConstellationID`),
  KEY `mapConstellationJumps_IX_fromRegion` (`fromRegionID`),
  KEY `toConstellationID` (`toConstellationID`,`toRegionID`),
  KEY `fromConstellationID` (`fromConstellationID`,`fromRegionID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  1. CREATE TABLE `mapConstellationJumps` (
  2.   `fromRegionID` int(11) DEFAULT NULL,
  3.   `fromConstellationID` int(11) NOT NULL,
  4.   `toConstellationID` int(11) NOT NULL,
  5.   `toRegionID` int(11) DEFAULT NULL,
  6.   PRIMARY KEY  (`fromConstellationID`,`toConstellationID`),
  7.   KEY `mapConstellationJumps_IX_fromRegion` (`fromRegionID`),
  8.   KEY `toConstellationID` (`toConstellationID`,`toRegionID`),
  9.   KEY `fromConstellationID` (`fromConstellationID`,`fromRegionID`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Strong with this one, the sudo is.
  • PolishHurricane
  • Mastermind
  • Mastermind
  • Avatar de Usuario
  • Registrado: Feb 17, 2005
  • Mensajes: 1585
  • Status: Offline

Nota Julio 21st, 2010, 4:18 pm

EVE, bonito, estoy tratando de dejar de fumar, toda una adicción. ¿Es usted consciente de esto? http://www.eve-icsc.com/jumptools/jumpplanner.php ¿O está tratando de hacer algo por el estilo?
There's no place like 127.0.0.1, badass part is now it's ::1
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Julio 22nd, 2010, 3:59 am

Yo no estoy en nada de lo que utiliza unidades de salto, tengo que jugar conectar los puntos con puertas de salto.

Hago un poco de la negociación. Me gusta comprar cosas en otras regiones a través de contratos así que a veces necesito saber la ruta más corta de un sistema solar a cualquiera de que las regiones los sistemas de punto de entrada para hacer una oferta en el contrato. Así que me tire de todos los sistemas de punto de entrada en la región y calcular la ruta más corta a todos ellos antes de regresar el camino más corto.

Mi plan es usar lo que empecé este hilo para encontrar sistemas de cierre a los altos precios órdenes de compra. Im constantemente comprar minerales a precios inferiores al valor de mercado de los sistemas en el medio de la nada para barato debido a que algunos mineros no quiere donarlas a un concentrador de mercado y esperar a que alguien los quiere en un premio, ya sea en ese sistema, o un sistema dentro de N salta algún tiempo después. ;)
Strong with this one, the sudo is.
  • PolishHurricane
  • Mastermind
  • Mastermind
  • Avatar de Usuario
  • Registrado: Feb 17, 2005
  • Mensajes: 1585
  • Status: Offline

Nota Julio 22nd, 2010, 10:57 am

Sí Ive hecho en realidad mucho de eso. Parece que este hombre trató de lograr algo similar, pero se ve como un fracaso...http://games.chruker.dk/eve_online/shor ... region.php (Por cierto, el resto de su sitio es un recurso increíble)

Espero que no pierda demasiado tiempo a este hombre, porque hay una gran cantidad de recursos hacia fuera allí que puede arreglárselas con. Una vez que usted se familiariza con el juego más, usted comenzará a sólo saber qué rutas son más cortas y conocer lugares. Theres solamente tantas rutas de alta seg dentro y fuera de las regiones, especialmente los más lejos que estén. Estos son generalmente los mejores fabricantes de ISK demasiado para ese tipo de comercio. Revise este mapa a cabo, me encanta: http://www.ombeve.co.uk/

Maldición esto no me ayuda, estoy todavía tratando de dejar de fumar.
There's no place like 127.0.0.1, badass part is now it's ::1
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Julio 22nd, 2010, 11:41 am

Sí Ive visto que primer enlace. Creo que funciona si está dentro del juego y darle la confianza sitio de modo que reciba los encabezados de solicitud HTTP con su ubicación actual.

Soy un poco paranoico sobre el uso de herramientas que pueden renunciar a mi lugar planeado o la punta de la autora a mis actividades.

"Mi camino más corto a la región" es de dos cuadros de texto y un botón de envío. El cuadro de texto primero es autocumplimentada con mi sistema actual, el segundo es bastante bueno sobre la interpretación de lo que quiero decir, si de tipo I en liazon "sumidero" que utilizará SOUNDEX () para averiguar que quise decir "Sinq de Enlace". Utiliza el API Javascript IGB para definir los destinos. Me dice cómo ir muchas puertas se encuentran en cada sistema en la ruta, así que saber para mantener un puesto de observación para gatecamps en los corredores. Puedo añadir otra información según sea necesario, por ejemplo, enfermedad, probablemente, aumentaría un recuento de la estación, tarde o temprano.
Strong with this one, the sudo is.

Publicar Información

  • Total de mensajes en este tema: 11 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 194 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC