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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  lista de adyacencia ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: lista de adyacencia ayuda  (Leído 1,974 veces)
danielSoccer

Desconectado Desconectado

Mensajes: 4


Ver Perfil
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.


« Última modificación: 16 Noviembre 2016, 15:19 pm por MCKSys Argentina » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cargar Lista de un fichero con fseek a una lista auxiliar en el programa.
Programación C/C++
samur88 1 3,122 Último mensaje 12 Mayo 2011, 23:25 pm
por samur88
Convertir de lista de adyacencia a matriz de adyacencia
Programación C/C++
acega 0 5,792 Último mensaje 21 Noviembre 2014, 16:21 pm
por acega
lista de adyacencia
Programación C/C++
danielSoccer 1 2,426 Último mensaje 11 Noviembre 2016, 02:22 am
por engel lex
matriz de adyacencia
Programación C/C++
Beginner Web 1 2,251 Último mensaje 8 Noviembre 2018, 05:08 am
por AlbertoBSD
Grafos con listas de adyacencia
Java
zkraven 1 4,945 Último mensaje 13 Enero 2019, 19:17 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines