#include<iostream>
#include<list>
using namespace std;
class Graph
{
int V,E;
int **adj;
list<int> *str;
public:
Graph()
{
cout<<"Enter the no of vertices and edges:"<<endl;
cin>>V>>E;
adj=new int*[V];
for(int i=0;i<V;i++)
adj[i]=new int[V];
str=new list<int>[V];
int v1,v2;
for(int i=0;i<E;i++)
{
cout<<endl<<"Enter vertices for edge :"<<i+1;
cin>>v1>>v2;
adj[v1-1][v2-1]=1;
adj[v2-1][v1-1]=1;
}
}
~Graph()
{
for(int i=0;i<V;i++)
delete []adj[i];
delete []adj;
}
void graphColoring();
};
void Graph::graphColoring()
{
int result[V];
int available[V];
result[0]=0; //assign color 0 to vertex-0
str[0].push_back(0);
for(int i=1;i<V;i++)
result[i]=-1;
for(int i=0;i<V;i++) // Color is available
available[i]=0;
for(int u=1;u<V;u++)
{
for(int i=0;i<V;i++)
{
if(adj[u][i]==1)
if(result[i]!=-1)
available[result[i]]=1;
}
int clr;
for(clr=0;clr<V;clr++)
if(available[clr]==0)
break;
result[u]=clr;
str[clr].push_back(u);
for(int i=0;i<V;i++)
{
if(adj[u][i]==1)
if(result[i]!=-1)
available[result[i]]=0;
}
// cout<<result[u];
}
for(int i=0;i<V;i++)
{
cout<<"Vertex :"<<i+1<<" Color: "<<result[i]<<endl;
}
cout<<endl<<endl;
list<int>::iterator j;
int i;
for(i=0;i<V&&str[i].begin()!=str[i].end();i++)
{
cout<<"Color :"<<i<< " Vertex ";
for(j=str[i].begin();j!=str[i].end();++j)
cout<<" "<<(*j)+1;
cout<<endl;
}
}
int main()
{
Graph g;
g.graphColoring();
return 0;
}Program for graph coloring using greedy approach
Subscribe to:
Posts (Atom)
No comments:
Post a Comment