Graph Coloring

 

 

            This is a real world problem. When designing maps, every region should be painted with different and fewer colors. This method can be used to decide how many different colors will be used.

 

 

 

The Algorithm

 

 

 

 

 

 

 

 

 


Pascal Source Code

 

Used Variables in program:

 

A[n,n] : Stores relations between nodes.

 

            C[]: Stores color letters

 

            B[]: Stores colored nodes.

                 Element 1: 1'rst node

                 Element 2: 2'nd node

                 .. .. 

S[]:array holds 0(zero)s in every line.

 

k

Red

m

Blue

y

Green

s

Yellow

t

Orange

b

White

f

 

 

 

 

 

 

 

 

 

 

Program Graf_coloring;
uses crt;
const
     c:array[1..7of char=('k','m','y','s','t','b','f');
var
a:array[1..7,1..7]of integer;
b:array[1..7]of string[5];
s:array[1..7]of integer;
i,j,k,n,r,t,p,f,d:integer;  ch:char;
{    "a"  relation matrix
     "b" colored elements' array
     "c" coloring array
     "s" array holds 0(zero)s in every line
}
Begin
clrscr;
write('Relation matrix's size:');readln(n);
writeln('Write the relation matrix...');
 i:=1;
 gotoxy(5,3);
 repeat
  write(i:4);i:=i+1;
 until i=n+1;
 for i:=1 to n do
  begin
   k:=3;
   for j:=1 to n  do
     begin
      gotoxy(k+4,i+3);read( a[i,j] );k:=k+4;
     end;
  end;
 t:=0;
  for i:=1 to n do 
   begin {2}
    t:=t+1;
    f:=0;
    j:=i;
    if b[i]='' then
      begin
       while j < n do
        begin
         if a[i,j]=0 then
           begin  {1}
            k:=1;
            if (b[j]=''then k:=n+1;
            if k>n then
               begin
                b[j]:=c[t];{generating coloring array}
                if j<>i then
                   begin
                    f:=f+1;
                    s[f]:=j;{ holds 0's place number }
                   end;
              end
              else j:=n;
           end;{1}
        end;
       if f<>0 then { controlling matrix and changing colored array'}
         begin
          for k:=1 to f-1 do
          for d:=k+1 to f  do
           begin
            if a[s[k],s[d]]=1 then b[s[d]]:='';
           end;
         end;
      end
     else  t:=t-1;
   end{2}
 writeln('Colored elements and their colors');
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     if b[i]=c[j] then
        case j of
           1:writeln(i,'  ´s color is red');
           2:writeln(i,'  ´s color is blue');
           3:writeln(i,'  ´s color is green');
           4:writeln(i,'  ´s color is yellow');
           5:writeln(i,'  ´s color is orange');
           6:writeln(i,'  ´s color is white');
        end;
    end;
  end;
 repeat ch:=readkey until ch=#27;
end.

 

 

Sample Executions

 

1) 


Relation matrix's size:7

Write the relation matrix...

      1   2   3   4   5   6   7

      0   1   1   1   1   0   0

      0   0   1   1   0   0   0

      0   0   0   1   0   0   0

      0   0   0   0   1   1   1

      0   0   0   0   0   1   1

      0   0   0   0   0   0   1

      0   0   0   0   0   0   0

Colored elements and their colors

1 ´s color is red

2 ´s color is blue

3 ´s color is green

4 ´s color is yellow

5 ´s color is blue

6 ´s color is red

7 ´s color is orange

 

 

2) 


Relation matrix's size:7

Write the relation matrix...

       1   2   3   4   5   6   7

      0   0   0   1   1   1   1

      0   0   0   1   1   1   1

      0   0   0   1   1   1   1

      0   0   0   0   0   0   0

      0   0   0   0   0   0   0

      0   0   0   0   0   0   0

      0   0   0   0   0   0   0

Colored elements and their colors

1 ´s color is red

2 ´s color is red

3 ´s color is red

4 ´s color is blue

5 ´s color is blue

6 ´s color is blue

7 ´s color is blue

 

 
Copyright by Chasan Chouse