Advertisement
Guest User

zimbabue

a guest
Dec 7th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXVERTICES 100
  4. #define MAXARESTAS  400
  5. int caminhos = 0;
  6.  
  7.  
  8. typedef struct
  9. {
  10.     int Adj[MAXVERTICES][MAXVERTICES];
  11.     int Inc[MAXVERTICES][MAXARESTAS];
  12.     int NVertices;
  13.     int NArestas;
  14.     int visitado[MAXVERTICES];
  15. } TGrafo1;
  16.  
  17. struct elementoFila
  18. {
  19.     int num;
  20.     struct fila *prox;
  21. };
  22. typedef struct elementoFila eFila;
  23.  
  24. struct tipofila
  25. {
  26.     eFila *primeiro;
  27.     int tamanho;
  28. };
  29. typedef struct tipofila tFila;
  30.  
  31. void zeraFila(tFila *F)
  32. {
  33.     F->primeiro = NULL;
  34.     F->tamanho = 0;
  35.     return;
  36. }
  37.  
  38. void addFila(tFila *F, int num)
  39. {
  40.     if(F->tamanho != 0)
  41.     {
  42.         eFila *eAux;
  43.         eAux = F->primeiro;
  44.         while (eAux->prox != NULL)
  45.         {
  46.             eAux = eAux->prox;
  47.         }
  48.         eFila *eNovo;
  49.         eNovo = (eFila*) malloc (sizeof(eFila));
  50.         eAux->prox = eNovo;
  51.         eNovo->num = num;
  52.         F->tamanho++;
  53.         eNovo->prox = NULL;
  54.         return;
  55.     }
  56.     else if(F->tamanho == 0)
  57.     {
  58.         eFila *eNovo;
  59.         eNovo = (eFila*) malloc (sizeof(eFila));
  60.         F->primeiro = eNovo;
  61.         eNovo->num = num;
  62.         F->tamanho++;
  63.         eNovo->prox = NULL;
  64.         return;
  65.     }
  66.  
  67.     return;
  68. }
  69.  
  70. void removeFila(tFila *F)
  71. {
  72.     if(F->tamanho != 0)
  73.     {
  74.         eFila *eAux;
  75.         eAux = F->primeiro;
  76.         F->primeiro = eAux->prox;
  77.         free(eAux);
  78.         F->tamanho--;
  79.     }
  80.     return;
  81. }
  82.  
  83. void insere_aresta(TGrafo1* A, int V1, int V2){
  84.                 A->Adj[V1][V2] = 1;
  85. }
  86.  
  87. void inicializa(TGrafo1* A){
  88.     int j;
  89.     int i;
  90.         for(j = 0; j < A->NVertices + 1; j++)
  91.         {
  92.             A->visitado[j] = 0;
  93.         }
  94. }
  95.  
  96. void bsf(TGrafo1 *A, int inicio, int fim)
  97. {
  98.     int i;
  99.     int j;
  100.     int auxn;
  101.     tFila fila;
  102.     zeraFila(&fila);
  103.     addFila(&fila, inicio);
  104.     A->visitado[inicio] = 1;
  105.  
  106.     do
  107.     {
  108.         auxn = fila.primeiro->num;
  109.  
  110.         for(i = 0; i < A->NVertices + 1; i++)
  111.         {
  112.  
  113.             if(A->Adj[auxn][i] == 1 && A->visitado[i] != 1 && i != fim && i != inicio)
  114.             {
  115.                 A->visitado[i] = 1;
  116.                 addFila(&fila,i);
  117.             }
  118.  
  119.             if(A->Adj[auxn][i] == 1 && i == fim)
  120.             {
  121.                 //printf("Caminho\n");
  122.                 caminhos++;
  123.             }
  124.         }
  125.         removeFila(&fila);
  126.     }while(fila.tamanho != 0);
  127.     return;
  128. }
  129.  
  130. int main(){
  131.     int rooms = 0;
  132.     int paths = 0;
  133.     int aux1 = -1;
  134.     int aux2 = -1;
  135.     int i;
  136.     TGrafo1 Mazeotaur;
  137.  
  138.     do{
  139.         scanf("%d %d", &rooms, &paths);
  140.     }while(rooms < 1 || paths < 1);
  141.  
  142.     Mazeotaur.NArestas = paths;
  143.     Mazeotaur.NVertices = rooms;
  144.  
  145.     inicializa(&Mazeotaur);
  146.  
  147.     for(i = 0; i < paths; i++)
  148.     {
  149.         do
  150.         {
  151.             scanf("%d %d", &aux1, &aux2);
  152.         }while(aux1 < 0 || aux2 < 0);
  153.  
  154.         insere_aresta(&Mazeotaur, aux1, aux2);
  155.     }
  156.  
  157.     scanf("%d %d", &aux1, &aux2); //Inicio e Fim
  158.  
  159.     bsf(&Mazeotaur, aux1, aux2);
  160.     printf("%d\n", caminhos);
  161.  
  162.     return 0;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement