Académique Documents
Professionnel Documents
Culture Documents
COLORAÇÃO DE GRAFOS
Introdução.............................................................................................................................3
Metodologia...........................................................................................................................3
Simulação..............................................................................................................................4
Conclusão..............................................................................................................................7
Anexos....................................................................................................................................8
Introdução
O seguinte projeto tem como objetivo desenvolver um algoritmo para coloração de grafos. O
programa foi desenvolvido em ambiente linux utilizando o software Scilab. Scilab é um freeware
com linguagem bastante semelhante ao Matlab cuja interface é simples e amigável. O algoritmo é
de autoria própria e é baseado em busca por profundidade.
Metodologia
De uma maneira simplificada, o programa é particionado em três etapas: entrada de dados,
processamento de dados e saída de dados. Logo abaixo será descrita cada uma dessas etapas. O
algoritmo completo está descrito no item “Anexos”.
1) Entrada de dados
M = fscanfMat('madj');
2) Processamento de dados
Esta etapa se caracteriza como ponto-chave do algoritmo, pois é nela que a criatividade do
programador se exterioriza. Utilizou-se o método de busca por profundidade, bastante popular entre
profissionais e hobbistas da área. Através de laços for foram feitas varreduras na matriz de
adjacências, de forma a colorir cada vértice do grafo em questão condicionando-os - através das
funções if e elseif – a não terem a mesma cor de qualquer vértice adjacente. Depois da primeira
varredura o programa faz um reprocessamento para prevenir possíveis erros do processo inicial e
então calcula o número cromático. Para melhor entendimento, vide Anexo.
3) Saída de dados
...fprintfMat(TMPDIR+'/output',cor);
editor(TMPDIR+'/output');
Matplot(C)...
Simulação
Foram feitas algumas simulações com matrizes de adjacências de ordem seis variando as
conexões dos vértices, com o objetivo de obter um resultado ótimo. Para executar o arquivo do
editor no console do Scilab utiliza-se a funcão exec('file'), onde file é o nome do arquivo de edição.
Seguem abaixo os resultados:
1ª Simulação
madj
011001
101011
110110
001010
011101
110010
Resultados:
crom =
3.
output =
1.000000
2.000000
3.000000
2.000000
1.000000
3.000000
janela gráfica =
madj
011111
101011
110110
101010
111101
110010
Resultados:
crom =
4.
output =
1.000000
2.000000
3.000000
2.000000
4.000000
3.000000
janela gráfica =
madj
011111
101011
110111
101010
111101
111010
Resultados:
crom =
5.
output =
1.000000
2.000000
3.000000
2.000000
4.000000
5.000000
janela gráfica =
arquivo: redes
//definição do vetor
for x=1:n
cor(x)=1;
end
//processamento
for i=2:n
for j=1:i
if (M(i,j)==0)
cor(i)=cor(j);
elseif (M(i,j)==1) & (cor(i)==cor(j));
cor(i)=cor(j)+1;
for k=1:i;
if (M(i,k)==1) & (cor(i)==cor(k));
cor(i)=cor(k)+1;
end
end
end
end
end
//reprocessamento-correção de erros
for i=2:n
for j=1:i
if (M(i,j)==1) & (cor(i)==cor(j));
cor(i)=cor(j)+1;
end
end
end
//número cromático
crom=1;
for x=1:n
if cor(x)>crom
crom=cor(x);
end
end
//plotagem de cores
for x=1:crom
C(x)=x;
end
//arquivo de saída
fprintfMat(TMPDIR+'/output',cor);
editor(TMPDIR+'/output');
crom
//gráfico de cores
Matplot(C)
011001
101011
110111
001010
011101
111010
011111
101011
110110
101010
111101
110010
011111
101011
110111
101010
111101
111010