Advertisement
ViniciusSDSilva

Ex1ED2

Apr 25th, 2017
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.00 KB | None | 0 0
  1. //-----------------------------------------
  2.  
  3. // EXERCICIO 1
  4. // POR GABRIEL FERREIRA E VINICIUS SANTIAGO
  5. // M 78218 e M 78208
  6.  
  7. //-----------------------------------------
  8.  
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. #define k 20
  12.  
  13. int menu();
  14.  
  15. void imprimeMatriz(int matIncidencia[][k], int nVertices, int nArestas);
  16. void zeraAresta(int matIncidencia[][k], int nVertices, int nArestas);
  17.  
  18. void insereAresta(int matIncidencia[][k], int nVertices, int nArestas);
  19. void excluiAresta(int matIncidencia[][k], int nVertices, int nArestas);
  20.  
  21. void grauGrafo(int matIncidencia[][k], int nVertices, int nArestas);
  22.  
  23. int main() {
  24.    
  25.     int nVertices, nArestas = 0;
  26.    
  27.     printf("Informe o numero de vertices: ");
  28.     scanf("%d", &nVertices);
  29.    
  30.     system("cls");
  31.    
  32.     int matIncidencia[nVertices][k];
  33.    
  34.     int opcao = menu();
  35.    
  36.     while(opcao != 5) {
  37.         if(opcao == 1) {
  38.             if(nArestas > 0) {
  39.                 imprimeMatriz(matIncidencia, nVertices, nArestas);
  40.             } else {
  41.                 printf("\nNao ha arestas no grafo!\n\n");
  42.             }
  43.         } else if(opcao == 2) {
  44.             if(nArestas < k-1) {
  45.                 zeraAresta(matIncidencia, nVertices, nArestas);
  46.                 insereAresta(matIncidencia, nVertices, nArestas);
  47.                
  48.                 nArestas++;            
  49.                
  50.                 imprimeMatriz(matIncidencia, nVertices, nArestas);
  51.                
  52.             } else {
  53.                 printf("\nMatriz de incidencia cheia!\n\n");
  54.             }
  55.         } else if(opcao == 3) {
  56.             if(nArestas > 0) {
  57.                 imprimeMatriz(matIncidencia, nVertices, nArestas);
  58.                 excluiAresta(matIncidencia, nVertices, nArestas);
  59.                 nArestas--;
  60.                 imprimeMatriz(matIncidencia, nVertices, nArestas);
  61.             } else {
  62.                 printf("\nMatriz de incidencia vazia!\n\n");
  63.             }
  64.         } else if(opcao == 4) {
  65.             if(nArestas > 0) {
  66.                 imprimeMatriz(matIncidencia, nVertices, nArestas);
  67.                 grauGrafo(matIncidencia, nVertices, nArestas);
  68.             } else {
  69.                 printf("\nMatriz de incidencia vazia!\n\n");
  70.             }
  71.         }
  72.        
  73.         opcao = menu();
  74.     }
  75.    
  76.    
  77.     return 0;
  78. }
  79.  
  80. void grauGrafo(int matIncidencia[][k], int nVertices, int nArestas) {
  81.     int somaEmissao = 0, somaRecepcao = 0, i, indice;
  82.    
  83.     printf("Informe qual o indice do vertice para saber seu grau: ");
  84.     scanf("%d", &indice);
  85.    
  86.     while(indice < 0 || indice > nArestas) {
  87.         printf("Vertice invalido! Re-informe o indice do vertice para saber seu grau: ");
  88.         scanf("%d", &indice);  
  89.     }
  90.  
  91.     for(i = 0; i < nArestas; i++) {
  92.         if(matIncidencia[i][indice] == 2) {
  93.             somaEmissao++;
  94.             somaRecepcao++;
  95.         } else {
  96.             if(matIncidencia[i][indice] == 1) {
  97.                 somaEmissao++;
  98.             } else if(matIncidencia[i][indice] == -1) {
  99.                 somaRecepcao++;
  100.             }
  101.         }
  102.     }
  103.     printf("\nO grafo possui G(V) = %d e G(A) = %d.\n", nVertices, nArestas);
  104.     printf("O grau de emissao do vertice %d eh: %d.\n", indice, somaEmissao);
  105.     printf("O grau de recepcao do vertice %d eh: %d.\n\n", indice, somaRecepcao);
  106.        
  107. }
  108.  
  109. void excluiAresta(int matIncidencia[][k], int nVertices, int nArestas) {
  110.     int x, y, indice;
  111.    
  112.     printf("Informe qual o indice da aresta a ser excluida: ");
  113.     scanf("%d", &indice);
  114.    
  115.     while(indice < 0 || indice > nArestas) {
  116.         printf("Aresta invalida! Re-informe o indice da aresta a ser excluida: ");
  117.         scanf("%d", &indice);  
  118.     }
  119.    
  120.     for(x = 0; x < nVertices; x++) {
  121.         for(y = indice; y < nArestas; y++) {
  122.             matIncidencia[y][x] = matIncidencia[y+1][x];
  123.         }
  124.     }
  125. }
  126.  
  127. void insereAresta(int matIncidencia[][k], int nVertices, int nArestas) {
  128.     int validacao = 0, origem, destino;
  129.    
  130.     imprimeMatriz(matIncidencia, nVertices, nArestas + 1);
  131.    
  132.     printf("Informe a origem da aresta %d: ", nArestas);
  133.     scanf("%d", &origem);
  134.    
  135.     while(origem < 0 || origem >= nVertices) {
  136.         printf("Numero invalido! Por favor, informe-o novamente: ");
  137.         scanf("%d", &origem);
  138.     }
  139.    
  140.     printf("Informe o destino da aresta %d: ", nArestas);
  141.     scanf("%d", &destino);
  142.    
  143.     while(destino < 0 || destino >= nVertices) {
  144.         printf("Numero invalido! Por favor, informe-o novamente: ");
  145.         scanf("%d", &destino);
  146.     }
  147.    
  148.     if(origem != destino) {
  149.         matIncidencia[nArestas][origem] = 1;
  150.         matIncidencia[nArestas][destino] = -1;     
  151.     } else {
  152.         matIncidencia[nArestas][destino] = 2;
  153.     }
  154.    
  155. }
  156.  
  157. void imprimeMatriz(int matIncidencia[][k], int nVertices, int nArestas) {
  158.     int x, y;
  159.    
  160.     system("cls");
  161.    
  162.     printf("\n------- Imprimindo a Matriz de Incidencia -------\n\n       ");
  163.    
  164.     for(x = 0; x < nArestas; x++) {
  165.         printf("%2d ", x);
  166.     }
  167.    
  168.     printf("\n");
  169.    
  170.     for(x = 0; x < nVertices; x++) {
  171.         printf("%2d - %c ", x, x+65);
  172.         fflush(stdin);
  173.         for(y = 0; y < nArestas; y++) {
  174.             printf("%2d ", matIncidencia[y][x]);
  175.         }
  176.         printf("\n");
  177.     }
  178.    
  179.     printf("\n");
  180. }
  181.  
  182. void zeraAresta(int matIncidencia[][k], int nVertices, int nArestas) {
  183.     for(int x = 0; x < nVertices; x++) {
  184.         matIncidencia[nArestas][x] = 0;
  185.     }
  186. }
  187.  
  188. int menu() {
  189.    
  190.     printf("Informe o que deseja fazer");
  191.     printf("\n\t1 - Imprimir grafo;");
  192.     printf("\n\t2 - Inserir aresta;");
  193.     printf("\n\t3 - Excluir aresta;");
  194.     printf("\n\t4 - Informar a ordem do grafo;");
  195.     printf("\n\t5 - Sair.\n");
  196.    
  197.     int opc;
  198.    
  199.     scanf("%d", &opc);
  200.    
  201.     while(opc < 1 || opc > 5) {
  202.         printf("Numero invalido! Inserir novamente: ");
  203.         scanf("%d", &opc);
  204.     }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement