Skip to content

MichelyFelix/Grafo

Repository files navigation

Grafo

Analise o arquivo dados_grafos.txt, armazenando o grafo em uma estrutura de matriz. Após isto, responda corretamente, em função do grafo produzido a partir de

dados_grafo.txt, as questões seguintes ou NA (Não se aplica) quando for necessário:

  1. Qual(is) o vértice(s) com maior(es) grau?
int grau_do_maior_vertice(int **matriz)
{
    int i, j, maior_grau, aux = 0, vertice_com_maior_grau;
    for (i = 0; i < tamanho_matriz; i++)
    {
        for (j = 0; j < tamanho_matriz; j++)
        {
            if (matriz[i][j] == 1)
            {
                aux++;
            }
        }
        if (aux > maior_grau)
        {
            maior_grau = aux;
            vertice_com_maior_grau = i;
        }
        aux = 0;
    }
    return vertice_com_maior_grau;
}
  1. Apresente em um arquivo chamado dados_grafos_graus.txt o número do vértices seguido pelo seu respectivo grau.
void escrever_graus_arquivo(char *nome_arquivo, int *graus, int tamanho)
{
    FILE *arquivo = fopen(nome_arquivo, "w");
    if (arquivo == NULL)
    {
        printf("Erro ao abrir o arquivo %s\n", nome_arquivo);
        return;
    }

    int i;
    for (i = 0; i < tamanho; i++)
    {
        fprintf(arquivo, "Vertice %d: Grau %d\n", i, graus[i]);
    }

    fclose(arquivo);
}
  1. Se existir, quais são os vértices isolados?
void vertices_isolados(int **matriz) {
    int isolado, count = 0;

    printf("Vértices isolados:\n");

    for (int i = 0; i < tamanho_matriz; i++) {
        isolado = 1;
        for (int j = 0; j < tamanho_matriz; j++) {
            if (matriz[i][j] != 0) { 
                isolado = 0;
                break;
            }
        }
        if (isolado) {
            printf("%d\n", i);
            count++;
        }
    }
}
  1. Existe um vértice sumidouro?
void vertice_sumidouro(int **matriz){
    int aux = 0;
    printf("Vertice(s) sumidouros:\n");
    for(int cont = 0; cont < tamanho_matriz; cont++){
        int sumidouro = 1;
        for(int cont2 = 0; cont2 < tamanho_matriz; cont2++){
            if (matriz[cont][cont2] != 0){
                sumidouro = 0;
                break;
            }
        } 
        if(sumidouro){
            printf("%d\n", cont);
            aux++;
        }
    }
    if (aux == 0){ // Se aux ainda for 0, nenhum vértice sumidouro foi encontrado
        printf("Nao foi encontrado vertice sumidouro!\n");
    }
}
  1. Existe um vértice fonte?
void vertice_fonte(int **matriz){
         int aux = 0; // Inicializa aux com 0
    printf("Vertice(s) fonte:\n");
    for(int cont = 0; cont < tamanho_matriz; cont++){
        int fonte = 1;
        for(int cont2 = 0; cont2 < tamanho_matriz; cont2++){
            if (matriz[cont2][cont] != 0){
                fonte = 0;
                break;
            }
        } 
        if(fonte){
            printf("%d\n", cont);
            aux++;
        }
    }
    if (aux == 0){ // Se aux ainda for 0, nenhum vértice sumidouro foi encontrado
        printf("Nao foi encontrado vertice sumidouro!\n");
    }
    }
  1. Determine o grau de Emissão e Recepção de cada vértice e os coloque em arquivos chamados de "dados_grafos_emissao.txt" e "dados_grafos_recepcao.txt". Não se aplica
  2. Apresente um arquivo com o grafo complementar da questão; repetida
  3. Inverta a direção de todas as arestas do grafo da questão e apresente-os em um novo arquivo com o nome de "dados_grafos_invertido.txt".
  4. Apresente o grafo complementar e os represente em um arquivo com o nome "dados_grafo_complementar.txt".
void grafo_complementar(int **matriz, char *nome_arquivo){
    FILE *arquivo = fopen(nome_arquivo, "w");
    if (arquivo == NULL)
    {
        printf("Erro ao abrir o arquivo %s\n", nome_arquivo);
        return;
    }

    for(int i = 0; i < tamanho_matriz; i++){
        for(int j = 0; j < tamanho_matriz; j++){
            if (i == j) { // Verifica se é um elemento da diagonal principal
                fprintf(arquivo, "%d ", matriz[i][j]); // Mantém o valor original
            } else {
                if(matriz[i][j] == 0){
                    matriz[i][j] = 1;
                } else {
                    matriz[i][j] = 0;
                }
                fprintf(arquivo, "%d ", matriz[i][j]);
            }
        }
        fprintf(arquivo, "\n");
    }

    fclose(arquivo);
}
  1. Apresente um novo arquivo chamado "dados_grafo_gerador.txt" com os vértices múltiplos de 5.
void vertice_multiplo5(int **matriz, char *nome_arquivo){
    FILE *arquivo = fopen(nome_arquivo, "w");
    if (arquivo == NULL)
    {
        printf("Erro ao abrir o arquivo %s\n", nome_arquivo);
        return;
    }

    fprintf(arquivo, "Vertices multiplos de 5:\n");
    for(int i = 0; i < tamanho_matriz; i++){
        if(i % 5 == 0){
            fprintf(arquivo, "%d\n", i);
        }
    }
    fclose(arquivo);
}
  1. Encontre o maior clique do grafo da questão.
  2. Verifique se o primeiro e último vértice estão conectados

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages