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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: [1]
1  Foros Generales / Dudas Generales / lema de bombeo en: 16 Noviembre 2016, 05:30 am
Muy buenas noches alguien sera que me podria pasar ejemplos de ejercicios del lema de bombeo por favor gracias
2  Programación / Programación C/C++ / lista de adyacencia ayuda en: 16 Noviembre 2016, 05:16 am
No entiendo alguien me explica como hago para que se me vea la lista si compila y todo pero no muestra la lista

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <conio.h>
  5. #include <string.h>
  6.  
  7. #define MaxNodos 47
  8.  
  9. typedef struct nodo_ {
  10.    int etiqueta;
  11.    float peso;
  12.    struct nodo_ *sig;
  13. }Tnodo;
  14.  
  15. /** variables globales */
  16. Tnodo *Lista[MaxNodos]; //lista de adyacencia
  17. int marca[MaxNodos]; //visitados
  18. int predecesores[MaxNodos]; //ruta
  19. float d[MaxNodos]; // distancia - peso
  20. int Num_Vertices; //numero de vertices
  21. int tipo; //1 no dirigido, 0 dirigido
  22. char uanl[250][250]; //Arreglo de nombres UANL
  23. /** ------------------ */
  24.  
  25. /* Inicializa la lista de adyacencia a NULL */
  26. void init() {
  27.    int i;
  28.    for (i = 0; i < MaxNodos; i++)
  29.        Lista[i] = NULL;
  30. }
  31.  
  32. int lista (int tipo)/*FUNCION QUE DESPLIEGA LA LISTA PARA SELECCIONAR LA OPCION DEL USUARIO*/
  33. {
  34. int val=0;
  35. do
  36. {
  37. printf("\n\n\tSeleccione una opcion");
  38. int j=0;
  39. switch(tipo)
  40. {
  41.  case 1: printf("\n\n\tCIUDAD UNIVERSITARIA");
  42.  
  43.     for(j=1;j<=28;j++)
  44.       printf("%s\n",uanl[j]);
  45.  
  46.         break;
  47.  case 2:printf("\n\n\tPREPARATORIAS");
  48.     for(j=29;j<=47;j++)
  49.       printf("%s\n",uanl[j]);
  50.  
  51.         break;
  52. };
  53. printf("\n\n\tIntroduzca el numero de la lista que desee...");
  54. scanf("%d",&val);
  55.  
  56. }while(val<1 || val > 47);
  57. return val;
  58. }
  59.  
  60. /* Inserta los vertices en la lista de adyacencia */
  61. void inserta (int Vorigen, int Vfinal, float peso) {
  62.    Tnodo *q;
  63.    q = (Tnodo*) malloc (sizeof(Tnodo) * 1);
  64.    if (!q) return; //hubo un error
  65.    q->etiqueta = Vfinal-1;
  66.    q->peso     = peso;
  67.    q->sig      = NULL;
  68.    if (Lista[Vorigen-1] != NULL)
  69.       q->sig = Lista[Vorigen-1];
  70.    Lista[Vorigen-1] = q;
  71. }
  72.  
  73. /* Libera la lista de adyacencia */
  74. void liberar_lista (void) {
  75.   Tnodo *q;
  76.   int i;
  77.   for (i = 0; i <  Num_Vertices; i++) {
  78.      if (Lista[i] != NULL) {
  79.         while (Lista[i] != NULL) {
  80.            q = Lista[i];
  81.            Lista[i] = Lista[i]->sig;
  82.            free(q);
  83.         }
  84.      } //--fin si (no necesarias las llaves)
  85.   } //--fin for (no necesaria las llaves)
  86. }
  87.  
  88. /* Carga el grafo desde un fichero */
  89. void cargar_grafo (char *fn) {
  90.  FILE *fp;
  91.  int v_in, v_fn; //vertice inicial y final
  92.  float peso;
  93.  if ((fp = fopen (fn, "r")) == NULL) {
  94.       printf ("El archivo %s no existe o no se puede abrir\n", fn);
  95.       getche();
  96.       exit(0);
  97.   }
  98.   fscanf (fp, "%d\n", &tipo); //tipo es una vble global
  99.   fscanf (fp, "%d\n", &Num_Vertices); //Num_Vertices es una vble global
  100.   while (!feof(fp)){
  101.         fscanf(fp, "%d %d %f\n", &v_in, &v_fn, &peso);
  102.         inserta(v_in, v_fn, peso);
  103.         inserta (v_fn, v_in, peso);
  104.   }
  105.   fclose (fp);
  106. } // fin cargar_grafo
  107. void cargar_nombres (char *fn) {
  108.  FILE *fp;
  109.    if ((fp = fopen (fn, "r")) == NULL) {
  110.       printf ("El archivo %s no existe o no se puede abrir\n", fn);
  111.       getche();
  112.       exit(0);
  113.   }
  114.  
  115.        int i=1;
  116.        char caracteres[150];
  117.  
  118.        printf("\nEl contenido del archivo de prueba es \n\n");
  119.        while (feof(fp) == 0)
  120.        {
  121.            fgets(caracteres,100,fp);
  122.                strcpy(uanl[i], caracteres);
  123.                i++;
  124.        }
  125.         fclose (fp);
  126. } // fin cargar_nombres
  127.  
  128.  
  129. /* Retorna el peso de la arista que une dos nodos */
  130. float return_peso (int origen, int destino) {
  131.   Tnodo *p;
  132.   int encontrado;
  133.  
  134.   encontrado = 0;
  135.   p = Lista[origen];
  136.   while (p != NULL && !encontrado) {
  137.      if (p->etiqueta == destino)
  138.        encontrado = 1;
  139.      else
  140.        p = p->sig;
  141.   }
  142.   return p->peso;
  143. }
  144.  
  145.  
  146. int menor_valor() {
  147.   int i, verticeMenor;
  148.   float menor;
  149.   menor = INT_MAX;
  150.   for (i = 0; i < Num_Vertices; i++) {
  151.      if (marca[i] == 0 )
  152.         if (menor > d[i]) {
  153.            menor = d[i];
  154.            verticeMenor = i;
  155.         }
  156.   } // fin for
  157.   return verticeMenor;
  158. }
  159.  
  160. /* Dijkstra */
  161. void dijkstra (int origen, int destino)
  162. {
  163.   int i, last, x;
  164.   Tnodo *p;
  165.   // inicializacion
  166.   for (i = 0; i < MaxNodos; i++) {
  167.      d[i] = INT_MAX; //"infinito"
  168.      marca[i] = 0;
  169.      predecesores[i] = -1;
  170.   }
  171.   // --
  172.   d[origen] = 0;
  173.   marca[origen] = 1;
  174.   last = origen;
  175.   while (marca[destino] == 0) { //hasta que no lleguemos al destino
  176.      p = Lista[last];
  177.      while (p != NULL){   //para todos los nodos adyacendes
  178.          if (marca[p->etiqueta] == 0) //si no ha sido visitado
  179.           if (d[p->etiqueta] > d[last] + return_peso(last, p->etiqueta))
  180.              {
  181.               d[p->etiqueta] = d[last] + return_peso(last, p->etiqueta);
  182.               predecesores[p->etiqueta] = last;
  183.           } // fin si
  184.           p = p->sig;
  185.      } // fin mientras
  186.      x = menor_valor();
  187.      marca[x] = 1;
  188.      last = x;
  189.   } // fin mientras
  190. }
  191.  
  192. /* Imprime la ruta por pantalla */
  193. void ImprimirCamino(int v) {
  194.   if (v != -1)
  195.      ImprimirCamino(predecesores[v]);
  196.   if (v != -1) //evitamos que se imprima el -1
  197.      {
  198.  
  199.                 printf("%s\n",uanl[v+1]);
  200.  
  201.      }
  202. }
  203.  
  204. /* Menu de opciones */
  205. int menu() {
  206.    int opcion;
  207.    do {
  208.        printf ("\n\n\t[0] Salir\n\t");
  209.        printf ("[1] Calcular ruta\n\n");
  210.        printf ("Opcion:_");
  211.        scanf("%d", &opcion);
  212.    }while (opcion < 0 || opcion > 1);
  213.    return opcion;
  214. }
  215.  
  216. /* Funcion principal */
  217. int main () {
  218.    char file[25];
  219.    int origen, destino,opi,tipo=0;
  220.    int salir = 0;
  221.    printf("\n\n\n\tBIENVENIDO\n\n\t...Presione cualquier tecla para comenzar..._");
  222.    getche();
  223.    init();
  224.  
  225.  
  226.    printf("\n\n\tSeleccione una opcion...");
  227.    do {
  228.        switch(menu())
  229.        {
  230.            case 0:
  231.                   salir = 1;
  232.                   break;
  233.            case 1:
  234.                     while(tipo!=1&&tipo!=2)
  235.            {
  236.  
  237.                           printf("\n\tSi desea partir de una facultad introduzca 1\n\tSi desea partir de una preparatoria introduca 2....._");
  238.                           scanf("%d",&tipo);
  239.  
  240.            }
  241.                         origen = lista (tipo);
  242.             tipo=0;
  243.       while(tipo!=1&&tipo!=2)
  244.            {
  245.  
  246.         printf("\n\tSi desea llegar de una facultad introduzca 1\n\tSi desea llegar de una preparatoria introduca 2....._");
  247.                           scanf("%d",&tipo);
  248.                        }
  249.                        destino= lista (tipo);
  250.                     dijkstra(origen-1, destino-1);
  251.                     printf("\n\n\tLA RUTA MAS RAPIDA ES....\n\n");
  252.                   ImprimirCamino(destino-1);
  253.                   break;
  254.        }; //final switch
  255.    tipo=0;
  256.    }while(!salir);
  257.    liberar_lista();
  258.  
  259.    }

MOD: Etiqueta GeSHi.
3  Programación / Programación C/C++ / lista de adyacencia en: 11 Noviembre 2016, 02:17 am
sd
4  Programación / Programación C/C++ / arbol binario de busqueda en: 11 Noviembre 2016, 02:08 am
Quisiera que alguien me colaborara con alguna funcion con el codigo que les voy a mostrar que muestre el valor mayor y menor de los nodos almacenados y mostrar el nivel de un nodo(el nivel del nodo es consultado por teclado) se los agradeceria muchas gracias
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. /*---------  Estructura del arbol  -------*/
  7. typedef struct nodo{
  8. int nro;
  9. struct nodo *izq, *der;
  10. }*ABB;
  11.  
  12. int numNodos = 0; // nummero de nodos del arbol ABB
  13.  
  14.  
  15.  
  16. /* ---------- Estructura de la cola ---------*/
  17. struct nodoCola{
  18. ABB ptr;
  19. struct nodoCola *sgte;
  20. };
  21. struct cola{
  22. struct nodoCola *delante;
  23. struct nodoCola *atras;
  24. };
  25.  
  26. void inicializaCola(struct cola &q)
  27. {
  28. q.delante = NULL;
  29. q.atras = NULL;
  30. }
  31.  
  32. void encola(struct cola &q, ABB n)
  33. {
  34. struct nodoCola *p;
  35. p = new(struct nodoCola);
  36. p->ptr = n;
  37. p->sgte = NULL;
  38. if(q.delante==NULL)
  39.   q.delante = p;
  40. else
  41. (q.atras)->sgte = p;
  42. q.atras = p;
  43. }
  44.  
  45. ABB desencola(struct cola &q)
  46. {
  47. struct nodoCola *p;
  48. p = q.delante;
  49. ABB n = p->ptr;
  50. q.delante = (q.delante)->sgte;
  51. delete(p);
  52. return n;
  53. }
  54.  
  55. ABB crearNodo(int x)
  56. {
  57. ABB nuevoNodo = new(struct nodo);
  58. nuevoNodo->nro = x;
  59. nuevoNodo->izq = NULL;
  60. nuevoNodo->der = NULL;
  61.  
  62. return nuevoNodo;
  63. }
  64. void insertar(ABB &arbol, int x)
  65. {
  66. if(arbol==NULL)
  67. {
  68. arbol = crearNodo(x);
  69. cout<<"\n\t  Insertado..!"<<endl<<endl;
  70. }
  71. else if(x < arbol->nro)
  72. insertar(arbol->izq, x);
  73. else if(x > arbol->nro)
  74. insertar(arbol->der, x);
  75. }
  76.  
  77. void preOrden(ABB arbol)
  78. {
  79. if(arbol!=NULL)
  80. {
  81. cout << arbol->nro <<" ";
  82. preOrden(arbol->izq);
  83. preOrden(arbol->der);
  84. }
  85. }
  86.  
  87. void enOrden(ABB arbol)
  88. {
  89. if(arbol!=NULL)
  90. {
  91. enOrden(arbol->izq);
  92. cout << arbol->nro << " ";
  93. enOrden(arbol->der);
  94. }
  95. }
  96.  
  97. void postOrden(ABB arbol)
  98. {
  99. if(arbol!=NULL)
  100. {
  101. enOrden(arbol->izq);
  102. enOrden(arbol->der);
  103. cout << arbol->nro << " ";
  104. }
  105. }
  106.  
  107. void verArbol(ABB arbol, int n)
  108. {
  109. if(arbol==NULL)
  110.   return;
  111. verArbol(arbol->der, n+1);
  112.  
  113. for(int i=0; i<n; i++)
  114. cout<<"   ";
  115.  
  116. numNodos++;
  117. cout<< arbol->nro <<endl;
  118.  
  119. verArbol(arbol->izq, n+1);
  120. }
  121.  
  122. bool busquedaRec(ABB arbol, int dato)
  123. {
  124. int r=0;   // 0 indica que lo encontre
  125.  
  126. if(arbol==NULL)
  127.   return r;
  128.  
  129. if(dato<arbol->nro)
  130.   r = busquedaRec(arbol->izq, dato);
  131.  
  132. else if(dato> arbol->nro)
  133. r = busquedaRec(arbol->der, dato);
  134.  
  135. else
  136. r = 1;   // son iguales, lo encontre
  137.  
  138. return r;
  139. }
  140.  
  141. ABB unirABB(ABB izq, ABB der)
  142. {
  143. if(izq==NULL) return der;
  144. if(der==NULL) return izq;
  145.  
  146. ABB centro = unirABB(izq->der, der->izq);
  147. izq->der = centro;
  148. der->izq = izq;
  149. return der;
  150. }
  151.  
  152. void elimina(ABB &arbol, int x)
  153. {
  154. if(arbol==NULL) return;
  155.  
  156. if(x<arbol->nro)
  157.   elimina(arbol->izq, x);
  158. else if(x>arbol->nro)
  159. elimina(arbol->der, x);
  160.  
  161. else
  162. {
  163. ABB p = arbol;
  164. arbol = unirABB(arbol->izq, arbol->der);
  165. delete p;
  166. }
  167. }
  168.  
  169.  
  170.  
  171. void recorrerxNivel(ABB arbol)
  172. {
  173. struct cola q;
  174. inicializaCola(q);
  175. cout << "\t";
  176.  
  177. if(arbol!=NULL)
  178. {
  179. encola(q, arbol);
  180.  
  181. while(q.delante!=NULL)
  182. {
  183. arbol = desencola(q);
  184. cout << arbol->nro << ' ';
  185.  
  186. if(arbol->izq!=NULL)
  187.   encola(q, arbol->izq);
  188.   if(arbol->der!=NULL)
  189.  encola(q, arbol->der);
  190. }
  191. }
  192. }
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200. void menu()
  201. {
  202. //system("cls");
  203. cout << "\n\t\t  ..[ ARBOL BINARIO DE BUSQUEDA ]..  \n\n";
  204. cout << "\t [1]  Insertar elemento                  \n";
  205. cout << "\t [2]  Mostrar arbol                      \n";
  206. cout << "\t [3]  Recorridos de profundiad           \n";
  207. cout << "\t [4]  Buscar elemento                    \n";
  208. cout << "\t [5]  Eliminar elemento                  \n";
  209. cout << "\t [6]  Recorrido por nieveles (Amplitud)  \n";
  210.    cout << "\t [7]  Nodos menores de 'k'               \n";
  211. cout << "\t [11] SALIR                              \n";
  212.  
  213. cout << "\n\t Ingrese opcion : ";
  214. }
  215.  
  216. void menu2()
  217. {
  218. system("cls");
  219. cout << endl;
  220. cout << "\t [1] En Orden     \n";
  221. cout << "\t [2] Pre Orden    \n";
  222. cout << "\t [3] Post Orden   \n";
  223. cout << "\n\t     Opcion :  ";
  224. }
  225.  
  226. int main()
  227. {
  228. ABB arbol = NULL;
  229. int x;
  230. int op, op2;
  231.  
  232.  
  233. //system("color f9");   // poner color a la consola
  234. do
  235. {
  236. menu();  cin>> op;
  237. cout << endl;
  238.  
  239. switch(op)
  240. {
  241. case 1:
  242. cout << " Ingrese valor : ";  cin>> x;
  243. insertar( arbol, x);
  244. break;
  245.  
  246. case 2:
  247. verArbol(arbol, 0);
  248. break;
  249.  
  250. case 3:
  251. menu2();  cin>> op2;
  252.  
  253. if(arbol!=NULL)
  254. {
  255. switch(op2)
  256. {
  257. case 1:
  258. enOrden(arbol); break;
  259. case 2:
  260. preOrden(arbol); break;
  261. case 3:
  262. postOrden(arbol); break;
  263. }
  264. }
  265. else
  266.   cout << "\n\t Arbol vacio..!";
  267. break;
  268.  
  269. case 4:
  270. bool band;
  271.  
  272. cout<<" Valor a buscar: "; cin>> x;
  273.  
  274. band = busquedaRec(arbol,x);
  275.  
  276. if(band==1)
  277.   cout << "\n\tEncontrado...";
  278. else
  279. cout << "\n\tNo encontrado...";
  280. break;
  281.  
  282. case 5:
  283. cout<<" Valor a eliminar: "; cin>> x;
  284. elimina(arbol, x);
  285. cout << "\n\tEliminado..!";
  286. break;
  287.  
  288. case 6:
  289. cout<<"\n\n Mostrando recorrido por amplitud\n\n";
  290. recorrerxNivel(arbol);
  291. break;
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298. case 8:
  299. exit(0);
  300. }
  301.  
  302. cout<<"\n\n\n";
  303. system("pause");
  304. }while(op!=8);
  305.  
  306. }




El que tenga la funcion le recompensare con paypal xbox live o dinero real (y)

Mod: Los códigos deben ir en etiquetas GeSHi, no escribir en mayúsculas, no hagas doble post
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines