Sunteți pe pagina 1din 5

Ministerul Educatiei al Republicii Moldova

Universitatea de Stat din Moldova

Lucrare de laborator nr.II

Disciplina: “Algoritmica Grafurilor”

Tema: ” COLORAREA GRAFULUI”


Metoda Succesivă

Realizat : Jura Mihaela,


Studenta anului-II [Grupa IA22]

Verificat : Țurcanu Călin

Chisinau 2017
 Notiuni introductive

Problemele de colorare ale vârfurilor sau ale muchiilor unui graf ocupă un rol important în
teoria grafurilor. La colorarea grafului se reduce un şir întreg de probleme practice. O caracteristică
specifică a acestor probleme este existenta obiectelor, care din careva considerente, nu pot fi unite
într-o clasă.
Fie G=(X,U) – un graf, k – număr natural. Orice funcţie de tipul
f: X(G)→ {1, 2,…, k}
se numeşte k-colorare a vârfurilor sau simplu k-colorare a grafului G.
O colorare se numeşte corectă, dacă f(xi)≠ f(xj) pentru orice două vârfuri adiacente xi şi xj.
O k-colorare corectă a unui graf poate fi tratată ca colorarea fiecărui vârf în unul din cele k culori,
în timp ce vârfurile adiacente trebuie să obţină culori diferite.
Numărul minim k, pentru care graful G devine k-colorabil, se numeşte numărul cromatic
al acestui graf şi se notează prin χ(G). O k-colorare corectă a grafului G pentru k=χ(G) se numeşte
minimă.
Ilustrarea celor spuse o vom face în baza unui graf G, prezentat mai jos, unde este indicată
una din cele 4-colorari corecte. Acest graf nu poate fi colorat corect, cu un număr mai mic de
culori, χ(G)=4.

x1 x2 x3 x4 x5
1 2 1 2 3

4 x6

1 2
x7 x8

k-colorarea după muchii a grafului G se numeşte funcţia , ce pune în corespondenţă


fiecărei muchii u numărul (u) din mulţimea {1, 2, ... , k}. Dacă avem o -colorare după muchii şi
(u)=c, atunci se spune că muchia u se colorează în culoarea c. Mulţimea tuturor muchiilor
colorate într-o culoare se numeşte clasă colorabilă după muchii.
Colorarea după muchii se numeşte corectă, dacă muchiile adiacente au culori diferite.
Graful ce posedă o k-colorare corectă după muchii se numeşte k-colorabil după muchii.
Numărul minimal k pentru care graful G e k-colorabil după muchii se numeşte index cromatic
(clasă cromatică) al garfului G şi se notează prin χ(G). Dacă χ(G)=k, atunci graful G se numeşte
k-cromatic după muchii.
Problema orarului este una din problemele practice, care se reduce la colorarea corecta a
grafului. Vom presupune că un anumit număr de lecţii trebuie predate într-un interval minim de
timp. Fiecare lecţie se face timp de o oră academică, însă unele lecţii nu pot avea loc simultan (de
exemplu, dacă sunt predate de unul şi acelaşi lector).
Vom construi un graf G, vârfurile căruia corespund lecţiilor, iar două vârfuri sunt adiacente
atunci şi numai atunci când nu pot avea loc simultan. Este evident, orice colorare corectă a acestui
graf determină un orar admisibil: lecţiile (ele corespund vârfurilor grafului), care fac parte din
1
aceeaşi clasa de culoare, au loc simultan. Şi invers, orice orar admisibil determină o colorare
corectă a grafului G. Orarul optim corespunde colorărilor minime, iar numărul de ore necesare
pentru desfăşurarea tuturor lecţiilor este egal cu χ(G).
Problemele de determinare a numărului cromatic şi construirii colorării corecte minime
pentru un graf arbitrar sunt foarte dificile şi nu sunt cunoscuţi algoritmi efectivi de soluţionare.
Vom considera un algoritm simplu de construire a unei colorări corecte, care într-un şir de cazuri
duce la colorări apropiate de cele minime.

#include <iostream>
#include <windows.h>

using namespace std;

const int MAX = 30;


int n = 19;
int rez[50],viz[50];

int culori(double[][MAX], int nr_vf);


void setcolor(int);

int main()
{
double matrix[MAX][MAX] =
{
// 1 2 3 4 5 6 7 8 9
{0, 1, 1, 0, 1, 0, 0, 0}, //1
{1, 0, 0, 1, 0, 1, 0, 0}, //2
{1, 0, 0, 1, 0, 0, 1, 0}, //3
{0, 1, 1, 0, 0, 0, 0, 1}, //4
{1, 0, 0, 0, 0, 1, 1, 0}, //5
{0, 1, 0, 0, 1, 0, 0, 1}, //6
{0, 0, 1, 0, 1, 0, 0, 1}, //7
{0, 0, 0, 1, 0, 1, 1, 0}, //8
};
int i, j, a, nr_vf;
int x,y,c,s,maxim=0;

setcolor(15);

cout << "Dati nodul de inceput :";


cin >> s;
for(int i=0;i<n;i++)
if(!viz[i])
{ c=culori(matrix, s);
if(c>maxim) maxim=c;
}
cout<<"Chi = "<<maxim<<"\n";
for(int i=1;i<=maxim;i++)
{
setcolor(i+9);
cout<<"culoarea "<<i<<": ";
for(int j=0;j<n;j++)

2
if(viz[j]==i) cout<<j<<" ";
cout<<endl;
}

setcolor(15);
return 0;
}

void setcolor(int color){

HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);


SetConsoleTextAttribute(hcon,color);
}

int culori(double matrix[][MAX], int nr_vf)


{
int vecin,parc,i,rez[50],j,c=1,maxim,t,gasit;
vecin=parc=0;
viz[nr_vf]=1;
rez[0] = nr_vf;
while(vecin <= parc)
{
for(i = 0; i <= n; i++)
{
if(matrix[rez[vecin]][i] && !viz[i])
{
parc++;
rez[parc] = i;
maxim = 0;
for(int k=0; k<=n; k++)
if(matrix[i][k] && viz[k] > maxim) maxim = viz[k];
t = 1;
do {
gasit = 0;
for(int k=0; k<=n; k++)
if(matrix[i][k] && viz[k]==t) gasit=1;
if(gasit) t++;
}
while(t <= maxim && gasit);
if(gasit) viz[i] = maxim+1;
else viz[i] = t;
}
}
vecin++;
}

for(i=0;i<=parc;i++) if(viz[rez[i]]>c) c=viz[rez[i]];


return c;

3
b)Să se determine indexul cromatic pentru grafurile din problema 1.

Index cromatic = 3.

c) Să se reprezinte grafurile indexul cromatic al cărora este egal cu 2.

d) Să se dee exemplu de graf, pentru care colorarea după muchii nu e minimală.