Dúvida Matriz

6 respostas
Seken

Galera não estou conseguindo fazer um código em que devo colorir uma matriz 5x5. Só que nessa matriz os elementos que fazem fronteira não podem ter a mesma cor.

Alguem poderia me ajudar?

6 Respostas

davidbuzatto

Colorir aonde?
Seu problema é com a matriz ou com o colorir?

[]'s

Andre_Rosa

E “não estou conseguindo fazer um código” é muito vago. Porque você acha que não está conseguindo? Posto que você tentou fazer.

M

coloca o seu codigo, pelo visto deve ser simples de resolver… vc ja fez alguma coisa?

E

http://en.wikipedia.org/wiki/Graph_coloring - voce não estipulou o número de cores. Se houver 25 cores, o seu problema é trivial :slight_smile:

davidbuzatto

Gostei :smiley: :smiley:

Seken

Eu fiz ele em c primeiro, pois tenho que criar ele em c e em java.

#include <stdio.h>
#include <stdlib.h>

    typedef struct no_grafo
    {
        int grau;
        int cor;
    }no;

int main()
{

    int i,j,aux, valor, soma; // variaveis de controle
    int n, c; // var para guardar o numero de nos e o numero cromatico
    c=0;

    printf("Numero de nós do grafo:"); //ENTRADA DE DADOS - NUMERO DE NOS E ARESTAS
    scanf("%d",&n);

    int C[n], M[n][n]; //vetor com as cores e matriz de adjacencias
    no N[n]; // vetores para guardar os nos e os nos em ordem de grau


    for (i=0;i<n;i++)
       {
        for (j=0;j<n;j++)
          {
              if(i<j)
              {printf ("Caso o no %d tem aresta para %d, Digite 1, Senão digite 0\n", i+1,j+1);
              scanf("%d", &valor);
              M[i][j]=valor;}

              else
              {
                M[i][j] = 0;
              }

        }
    }


    for(i=0;i<n;i++) //CONTAGEM DO  GRAU DE CADA NO
     {
         for(j=0;j<n;j++)
         {
            if (M[i][j]==1)
                N[i].grau++;
         }
     }


    for(i=0;i<(n-2);i++) //ORDENAR OS NOS POR GRAU
    {
        for(j=n-1;j>i;j--)
        {
            if (N[j].grau<N[j-1].grau)
            {
                aux=N[j].grau;
                N[j].grau= N[j-1].grau;
                N[j-1].grau=aux;

            }
        }
    }


    for (i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {

                if(M[i][j]==1 && i!=j)
                {
                    c=c+1;
                    N[i].cor=C[c];

                }

        }

    }

    printf("Numero Cromatico do Grafo = %d",c);
    return 0;
}
Criado 28 de outubro de 2011
Ultima resposta 28 de out. de 2011
Respostas 6
Participantes 5