Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //-----------------------------------------
- // EXERCICIO 1
- // POR GABRIEL FERREIRA E VINICIUS SANTIAGO
- // M 78218 e M 78208
- //-----------------------------------------
- #include <stdlib.h>
- #include <stdio.h>
- #define k 20
- int menu();
- void imprimeMatriz(int matIncidencia[][k], int nVertices, int nArestas);
- void zeraAresta(int matIncidencia[][k], int nVertices, int nArestas);
- void insereAresta(int matIncidencia[][k], int nVertices, int nArestas);
- void excluiAresta(int matIncidencia[][k], int nVertices, int nArestas);
- void grauGrafo(int matIncidencia[][k], int nVertices, int nArestas);
- int main() {
- int nVertices, nArestas = 0;
- printf("Informe o numero de vertices: ");
- scanf("%d", &nVertices);
- system("cls");
- int matIncidencia[nVertices][k];
- int opcao = menu();
- while(opcao != 5) {
- if(opcao == 1) {
- if(nArestas > 0) {
- imprimeMatriz(matIncidencia, nVertices, nArestas);
- } else {
- printf("\nNao ha arestas no grafo!\n\n");
- }
- } else if(opcao == 2) {
- if(nArestas < k-1) {
- zeraAresta(matIncidencia, nVertices, nArestas);
- insereAresta(matIncidencia, nVertices, nArestas);
- nArestas++;
- imprimeMatriz(matIncidencia, nVertices, nArestas);
- } else {
- printf("\nMatriz de incidencia cheia!\n\n");
- }
- } else if(opcao == 3) {
- if(nArestas > 0) {
- imprimeMatriz(matIncidencia, nVertices, nArestas);
- excluiAresta(matIncidencia, nVertices, nArestas);
- nArestas--;
- imprimeMatriz(matIncidencia, nVertices, nArestas);
- } else {
- printf("\nMatriz de incidencia vazia!\n\n");
- }
- } else if(opcao == 4) {
- if(nArestas > 0) {
- imprimeMatriz(matIncidencia, nVertices, nArestas);
- grauGrafo(matIncidencia, nVertices, nArestas);
- } else {
- printf("\nMatriz de incidencia vazia!\n\n");
- }
- }
- opcao = menu();
- }
- return 0;
- }
- void grauGrafo(int matIncidencia[][k], int nVertices, int nArestas) {
- int somaEmissao = 0, somaRecepcao = 0, i, indice;
- printf("Informe qual o indice do vertice para saber seu grau: ");
- scanf("%d", &indice);
- while(indice < 0 || indice > nArestas) {
- printf("Vertice invalido! Re-informe o indice do vertice para saber seu grau: ");
- scanf("%d", &indice);
- }
- for(i = 0; i < nArestas; i++) {
- if(matIncidencia[i][indice] == 2) {
- somaEmissao++;
- somaRecepcao++;
- } else {
- if(matIncidencia[i][indice] == 1) {
- somaEmissao++;
- } else if(matIncidencia[i][indice] == -1) {
- somaRecepcao++;
- }
- }
- }
- printf("\nO grafo possui G(V) = %d e G(A) = %d.\n", nVertices, nArestas);
- printf("O grau de emissao do vertice %d eh: %d.\n", indice, somaEmissao);
- printf("O grau de recepcao do vertice %d eh: %d.\n\n", indice, somaRecepcao);
- }
- void excluiAresta(int matIncidencia[][k], int nVertices, int nArestas) {
- int x, y, indice;
- printf("Informe qual o indice da aresta a ser excluida: ");
- scanf("%d", &indice);
- while(indice < 0 || indice > nArestas) {
- printf("Aresta invalida! Re-informe o indice da aresta a ser excluida: ");
- scanf("%d", &indice);
- }
- for(x = 0; x < nVertices; x++) {
- for(y = indice; y < nArestas; y++) {
- matIncidencia[y][x] = matIncidencia[y+1][x];
- }
- }
- }
- void insereAresta(int matIncidencia[][k], int nVertices, int nArestas) {
- int validacao = 0, origem, destino;
- imprimeMatriz(matIncidencia, nVertices, nArestas + 1);
- printf("Informe a origem da aresta %d: ", nArestas);
- scanf("%d", &origem);
- while(origem < 0 || origem >= nVertices) {
- printf("Numero invalido! Por favor, informe-o novamente: ");
- scanf("%d", &origem);
- }
- printf("Informe o destino da aresta %d: ", nArestas);
- scanf("%d", &destino);
- while(destino < 0 || destino >= nVertices) {
- printf("Numero invalido! Por favor, informe-o novamente: ");
- scanf("%d", &destino);
- }
- if(origem != destino) {
- matIncidencia[nArestas][origem] = 1;
- matIncidencia[nArestas][destino] = -1;
- } else {
- matIncidencia[nArestas][destino] = 2;
- }
- }
- void imprimeMatriz(int matIncidencia[][k], int nVertices, int nArestas) {
- int x, y;
- system("cls");
- printf("\n------- Imprimindo a Matriz de Incidencia -------\n\n ");
- for(x = 0; x < nArestas; x++) {
- printf("%2d ", x);
- }
- printf("\n");
- for(x = 0; x < nVertices; x++) {
- printf("%2d - %c ", x, x+65);
- fflush(stdin);
- for(y = 0; y < nArestas; y++) {
- printf("%2d ", matIncidencia[y][x]);
- }
- printf("\n");
- }
- printf("\n");
- }
- void zeraAresta(int matIncidencia[][k], int nVertices, int nArestas) {
- for(int x = 0; x < nVertices; x++) {
- matIncidencia[nArestas][x] = 0;
- }
- }
- int menu() {
- printf("Informe o que deseja fazer");
- printf("\n\t1 - Imprimir grafo;");
- printf("\n\t2 - Inserir aresta;");
- printf("\n\t3 - Excluir aresta;");
- printf("\n\t4 - Informar a ordem do grafo;");
- printf("\n\t5 - Sair.\n");
- int opc;
- scanf("%d", &opc);
- while(opc < 1 || opc > 5) {
- printf("Numero invalido! Inserir novamente: ");
- scanf("%d", &opc);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement