Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
91823
K049
La figura muestra un mapa con 4 distritos A, B, C y D. Se trata de pintar cada distrito con
un color de forma que, dos regiones con un borde común (que no sea un punto) tengan
distintos colores y queremos hacer esto usando un mínimo de colores.
1.- Encuentra una representación en términos de vértices y aristas de un grafo a partir del
mapa dado.
Vértices:
A B C D
A B
C D
El resultado es un grafo plano no dirigido, en el que sus vértices están unidos por las aristas
de la siguiente manera:
G: {(A,B)(A,C)(A,D)(B,C)(B,D)(C,D)}
2.- Investiga un algoritmo que aplicado a grafos te permita ir coloreando los vértices de tal
forma que no coincidan en color, con el color de los vértices que estén unidos a ellos a
través de aristas.
Colorear grafo
El algoritmo voraz comienza la coloración de los vértices según orden de éstos en la matriz
de adyacencias del grafo. La coloración se realiza siguiendo los siguientes pasos.
• Paso inicial. Ordenamos los vértices del grafo. (el resultado del algoritmo dependerá
del orden elegido). Esto es, disponemos los vértices del grafo en una lista (v1, v2, .
. . , vn) .
Ahora asignaremos colores a los vértices siguiendo el orden elegido.
3.- Explica el algoritmo de coloración que hayas utilizado, en conjunto con la corrida a mano
de la coloración del grafo, la cual representa al mapa dado en la actividad.
Aplicando el algoritmo voraz al problema del mapa, donde tenemos cuatro vértices
(A,B,C,D), conectados por aristas entre todos y cada uno de ellos, tenemos:
Grafo:
A B
C D
Vértices ordenados:
A B C D
2) Como el vértice B está unido con una arista a A no podemos utilizar el color a, así
que le asignamos otro color; color 2.
A B
3) Ahora colorearemos el vértice C, y ya que este está conectado tanto con el vértice
A y el vértice B, le asignamos otro color: color 3.
Los colores se verifican del primero al último que se asignó.
A B
A B
C D
class Graph {
//Constructor.
Graph(int v)
{
V = v;
adj = new LinkedList[v];
for (int i=0; i<v; ++i)
adj[i] = new LinkedList();
}
// Imprimir el resultado.
for (int u = 0; u < V; u++)
System.out.println("Vértice " + u + " ---> Color "
+ result[u]);
}
// Método principal.
{
Graph g1 = new Graph(4);
g1.addEdge(0, 1);
g1.addEdge(0, 2);
g1.addEdge(0, 3);
g1.addEdge(1, 2);
g1.addEdge(1, 3);
g1.addEdge(2, 3);
System.out.println("Coloración de grafo 1");
g1.greedyColoring();
}
}
}
}
Bibliografía
https://es.wikipedia.org/wiki/Teor%C3%ADa_de_grafos
http://www.uap.edu.pe/intranet/fac/material/02/20111DI020102202020103011/20111DI02
010220202010301124923.pdf