Professional Documents
Culture Documents
Problemas NP completo:
-não há algoritmo polinomial
Problemas NP difícil
-são problemas de otimização, ou seja, além de determinar se existe, deve-se
determinar o maior ou menor.
G = <V,E>
|V| = n : ordem do grafo
|E| = m : comprimento do grafo
vértices ou nós
arestas ou arcos.
multigrafos: um ou mais pares de vértices apresentam mais de uma aresta entre si.
a arestas nesse caso são ditas arestas paralelas.
grafos simples: não contém laços de arestas paralelas.
pseudografo: grafo que contém pelo menos um laço.
grafo rotulado: um grafo pode ser rotulado tanto em vértices como em arestas, ou em
ambos.
no caso da rotulação: os rotulos servem para identificar os elementos do grafo.
portanto os rotulos servem como uma forma de armazenar informações no grafo.
O que são rótulos: são informações associadas aos vértices ou arestas dos grafos.
Coloração em grafos
-coloração de grafos consite em colorir um grafo de forma vértices adajacentes
tenham cores distintas.
-atribuir uma cor para cada vértice
-bem, colorir um grafo é fácil, é só ir atribuindo cores distintas para cada
vértice.
-O problema consiste um colorir um grafo utilizando o menor número de cores
possível
Nosso Problema
-coloração própria utilizando o menor número de cores possível
-número cromático
procedimento matrizAdjParaListaAdj(M[n][n])
vetor[n]
retorna vetor;
fim_procedimento
procedimento listaAdjParaMatrizAdj(vetor[n])
M[n][n]
procedimento WP(G<V,E>)
ordenaPorGrau(V)
nc = 0;
para cada v E V faça
encontrou = false
c = 1
enquanto c <= |V| e !encontrou faça
disponivel = true
para cada w E adj(v) e disponivel faça
se color[w] == c então
disponivel = false
fim_se
fim_para
se disponivel então
encontrou = true
senão
c = c + 1
fim_se
fim_enquanto
se encontrou então
color[v] = c
se c > nc então
nc = c
fim_para
fim_se
fim_para
retorna nc
fim_procedimento
procedimento listColoring(G<V,E>)
cores = {1, 5, 11, 16, 29}
ordenaPorGrau(V)
nc = 0;
para cada v E V faça
encontrou = false
c = cores[0]
enquanto c <= |cores| e !encontrou faça
disponivel = true
se disponivel então
encontrou = true
senão
c = c + 1
fim_se
fim_enquanto
se encontrou então
color[v] = c
se c > nc então
nc = c
fim_para
fim_se
fim_para
retorna nc
fim_procedimento