elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++]Estructura matricial, tipo(conjunto)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++]Estructura matricial, tipo(conjunto)  (Leído 2,525 veces)
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
[C++]Estructura matricial, tipo(conjunto)
« en: 8 Octubre 2012, 01:16 am »

Aquí pongo un código que estoy haciendo por si a alguien le hiciera falta.

Sirve para representar grafos y en el ejemplo lo combino con un pequeño mapa de 7x7 con colisión por así decirlo.
Código
  1. #include <iostream>
  2. using namespace std;
  3. ///////////////////////////////////////////////
  4. ///////////////////////////////////////////////
  5. class Map2D {// Esta clase es para generar una matrix de 2dimensiones
  6.    public://sirvepara crear un mapa con cordenadas 'x' e 'y'
  7.        Map2D(int,int);
  8.        bool mMap[100][100];//bool es para que solo tome 2 valores posibles true'1' y false'0' en el mapa false es colisión y true es libre
  9.        void Print();// esto para imprimir el mapa
  10.        void Add(int,int);// esto lo he echo para añadir una colisión
  11.        int mSizeX;//esto es el tamaño del ancho del mapa, pueden tomar como valor máximo 100 por el tamaño de la matrix mMap...
  12.        int mSizeY;//esto es el tamaño del alto del mapa, pueden tomar como valor máximo 100 por el tamaño de la matrix mMap...
  13. };
  14. Map2D::Map2D(int _x,int _y){
  15.    mSizeX=_x;
  16.    mSizeY=_y;
  17.    for(int y=0;y<_y;y++){
  18.        for(int x=0;x<_x;x++){
  19.            mMap[y][x]=false;//el mapa se crea vacio.
  20.        }
  21.    }
  22. }
  23. void Map2D::Print(){//esto nada más es para imprimir el mapa
  24.    for(int y=0;y<mSizeY;y++){
  25.        for(int x=0;x<mSizeX;x++){
  26.            cout << mMap[y][x];
  27.        }
  28.        cout << endl;
  29.    }
  30.    cout << endl;
  31. }
  32. void Map2D::Add(int x,int y){// Esto es para añadir una colisión un tontería puesto que los miembros son publicos en la clase
  33.    mMap[y][x]=true;//nada más lo hice para ahorrar trabajo, puesto con poner (Map2D::Add(x,y) 'x' e 'y' son cordenadas.) añade colision
  34. }
  35.  
  36. ///////////////////////////////////////////////
  37. ///////////////////////////////////////////////
  38. class StructMatricial {// Esta clase es para crear una estructura matricial de tipo conjunto, sirve para trabajar con grafos
  39.    public:
  40.        StructMatricial();
  41.        bool Load(Map2D);
  42.        int mVertices[100];//vertices que tiene el grafo
  43.        int mAristas[100][10];//una arista es el camino que une un vertice con otro. por ejemplo si el vertice '1' tiene una arista que conecta con el vertice '2' sería así mAristas[1][0]=2
  44.        int mNumerosAristas[100];//Para saber el numero de aristas que tiene cada vertice, "caminos hacia otros vertices"
  45.        bool mIsVertice[100];//esta es una matriz complementaría para saber si el vertice es transitable o no, si no es colision ese punto entonces es transitable
  46. };
  47.  
  48. StructMatricial::StructMatricial(){
  49. }
  50.  
  51. bool StructMatricial::Load(Map2D m){
  52.    int iv=0;//iterador vertices
  53.    int ia=0;//iterador aristas
  54.    //Primero Creamos todos los vertices
  55.    for(int y=0;y<m.mSizeY;y++){
  56.        for(int x=0;x<m.mSizeX;x++){
  57.            mVertices[iv]=iv;//
  58.            if(m.mMap[y][x]==false){//Si la posicion no es colision
  59.                mIsVertice[iv]=false;//la posicon es un vertice transitable
  60.            }
  61.            else mIsVertice[iv]=true;//Si no, no lo es
  62.            // incremento del iterador
  63.            iv++;
  64.  
  65.        }
  66.    }
  67.    iv=0;
  68.    for(int y=0;y<m.mSizeY;y++){
  69.        for(int x=0;x<m.mSizeX;x++){
  70.            if(m.mMap[y][x]==false){
  71.                if(m.mMap[y][x-1]==false && x>0){// si izquierda no es colision .. el x>0 es para que no se salga de memoria la operación
  72.                    mAristas[iv][ia]=mVertices[((y*m.mSizeX)+x-1)];// entoncens el vertice tiene una arista hacia el vertice de la izquierda
  73.                    ia++;
  74.                }
  75.                if(m.mMap[y][x+1]==false && x<m.mSizeX){
  76.                    mAristas[iv][ia]=mVertices[(y*m.mSizeX)+x+1];
  77.                    ia++;
  78.                }
  79.                if(m.mMap[y-1][x]==false && y>0){
  80.                    mAristas[iv][ia]=mVertices[((y-1)*m.mSizeX)+x];
  81.                    ia++;
  82.                }
  83.                if(m.mMap[y+1][x]==false && y<m.mSizeY){
  84.                    mAristas[iv][ia]=mVertices[((y+1)*m.mSizeX)+x];
  85.                    ia++;
  86.                }
  87.            }
  88.            // incremento del iterador
  89.            mNumerosAristas[iv]=ia;
  90.            iv++;
  91.            ia=0;
  92.  
  93.        }
  94.    }
  95.    return false;
  96. };
  97. ///////////////////////////////////////////////
  98. ///////////////////////////////////////////////
  99.  
  100.  
  101. ///////////////////////////////////////////////
  102. ///////////////////////////////////////////////
  103. int main(int argc,char* argv[]){
  104.    ///////////////////////////////////////////
  105.    // Creación del mapa
  106.    Map2D map(7,7);
  107.    map.Add(3,2);
  108.    map.Add(4,1);
  109.    map.Add(2,3);
  110.    map.Add(4,3);
  111.    for(int i=0;i<7;i++)map.Add(i,0);
  112.    for(int i=0;i<7;i++)map.Add(i,6);
  113.    for(int i=0;i<7;i++)map.Add(0,i);
  114.    for(int i=0;i<7;i++)map.Add(6,i);
  115.    map.Print();
  116.    ///////////////////////////////////////////
  117.    // Creación de la estructura matricial conjunto
  118.    StructMatricial SM;// Trollface con el nombre
  119.    SM.Load(map);
  120.    ///////////////////////////////////////////
  121.    ///////////////////////////////////////////
  122.    cout << "vertice: "<< SM.mVertices[24]<< endl;
  123.    cout << "Aristas: ";
  124.    for(int i=0;i<SM.mNumerosAristas[24];i++)cout << SM.mAristas[24][i] << "-" ;
  125.    cout << endl;
  126.    cout << "Game Over" << endl;
  127.    return 0;
  128. }


« Última modificación: 8 Octubre 2012, 12:25 pm por Xafi » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: [C++]Estructura matricial, tipo(conjunto)
« Respuesta #1 en: 8 Octubre 2012, 02:39 am »

Pues, dejame decirte que muy buen esfuerzo, pero no se entiende lo que haces, podrias explicar un poco de que se trata?

Entiendo que generas una matriz 7x7, y la generas llenandola con "0" y vas cambiando determinados puntos. Pero, veo que usas clases, todavia no he llegado a ese apartado en C++, como se trabaja??

Buen código, pero a la hora de cargarlo sale esto:

Citar
1111111
1000101
1001001
1010101
1000001
1000001
1111111

vertice: 8
Aristas: 9-15-
Game Over

Process returned 0 (0x0)   execution time : 0.013 s
Press any key to continue.

Lo saque en codeblocks, pero no se que quieres decir ni con vertice ni con aristas.
Muy confuso lo que tratas de hacer, me gustaria mucho que explicaras como trabaja cada función y las clases, si no es mucho pedir, aparte de eso, es un trabajo genial colega!



En línea


anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: [C++]Estructura matricial, tipo(conjunto)
« Respuesta #2 en: 8 Octubre 2012, 12:23 pm »

Soy malo explicando pero he modificado el código añadiendo comentarios, Este código puede servir para hacer el código de el camino más corto, quizás haya otras formas no lo sé, sobre las clases pues la uso para dividir el trabajo en plan, esto pertenece a esto y esto otro a esto. esta semilla es de manzana y esta otra semilla de pera, jeje.

y sobre lo que se imprime es lo siguiente.
el mapa, 1 colisión y 0 no colisión, imagina un mapa de ciudad y tienes que trazar el camino más corto hasta el cine, no vale hacer una linea recta por que hay edificios en medio, pues entonces ponemos un 1.
donde pone vértice es el vértice que quiero examinar y donde aristas son las aristas que tiene el vértice que comunica con otros vértices, osea el 9 y el 15 que te salió son otros vértices, la arista almacena el vértice al que conecta. Espero haber explicado lo mejor posible esto.
Cualquier cosa avisa.

Si quieres información sobre la grafos visita este link. http://es.wikipedia.org/wiki/Teor%C3%ADa_de_grafos
« Última modificación: 8 Octubre 2012, 12:26 pm por Xafi » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Teclado matricial -> binario
Electrónica
alfafa 1 9,413 Último mensaje 3 Noviembre 2005, 10:39 am
por Syphroot
[SRC] Calculadora Matricial ~
Java
Dnk! 1 3,359 Último mensaje 2 Diciembre 2010, 22:58 pm
por Debci
construir estructura tipo arbol !!!!
Desarrollo Web
01munrra 2 2,587 Último mensaje 14 Marzo 2012, 23:16 pm
por 01munrra
problema estructura de datos tipo cola
Programación C/C++
charlyvaron 0 1,686 Último mensaje 23 Mayo 2015, 00:30 am
por charlyvaron
(EXCEL-VBA) ¿Existen variables tipo CONJUNTO?
Programación Visual Basic
jvchino 2 1,899 Último mensaje 19 Diciembre 2015, 18:50 pm
por jvchino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines