এই সমস্যায়, একটি অনির্দেশিত গ্রাফ দেওয়া হয়েছে৷ এম কালারও দেওয়া আছে। সমস্যাটি হল m বিভিন্ন রঙের সাথে নোডগুলি বরাদ্দ করা সম্ভব কিনা তা খুঁজে বের করা, যেমন গ্রাফের দুটি সংলগ্ন শীর্ষবিন্দু একই রঙের নয়। যদি সমাধানটি বিদ্যমান থাকে, তাহলে কোন শীর্ষবিন্দুতে কোন রঙ বরাদ্দ করা হয়েছে তা প্রদর্শন করুন।
শীর্ষবিন্দু 0 থেকে শুরু করে, আমরা বিভিন্ন নোডে একের পর এক রঙ বরাদ্দ করার চেষ্টা করব। তবে অ্যাসাইন করার আগে, আমাদের রঙটি নিরাপদ কি না তা পরীক্ষা করতে হবে। সংলগ্ন শীর্ষবিন্দুতে একই রঙ রয়েছে কিনা তা নিরাপদ নয়৷
ইনপুট এবং আউটপুট
Input: The adjacency matrix of a graph G(V, E) and an integer m, which indicates the maximum number of colors that can be used. Let the maximum color m = 3. Output: This algorithm will return which node will be assigned with which color. If the solution is not possible, it will return false. For this input the assigned colors are: Node 0 -> color 1 Node 1 -> color 2 Node 2 -> color 3 Node 3 -> color 2
অ্যালগরিদম
isValid(vertex, colorList, col)
ইনপুট - ভার্টেক্স, চেক করার জন্য কালারলিস্ট এবং রঙ, যা বরাদ্দ করার চেষ্টা করছে।
আউটপুট - রঙ বরাদ্দ করা বৈধ হলে সত্য, অন্যথায় মিথ্যা।
Begin for all vertices v of the graph, do if there is an edge between v and i, and col = colorList[i], then return false done return true End
গ্রাফ কালারিং (রঙ, রঙ তালিকা, শীর্ষবিন্দু)
ইনপুট - সর্বাধিক সম্ভাব্য রং, তালিকার শীর্ষবিন্দুগুলি কোন রঙ দিয়ে রঙ করা হয়েছে এবং শুরুর শীর্ষবিন্দু।
আউটপুট - সত্য, যখন রং বরাদ্দ করা হয়, অন্যথায় মিথ্যা।
Begin if all vertices are checked, then return true for all colors col from available colors, do if isValid(vertex, color, col), then add col to the colorList for vertex if graphColoring(colors, colorList, vertex+1) = true, then return true remove color for vertex done return false End
উদাহরণ
#include<iostream> #define V 4 using namespace std; bool graph[V][V] = { {0, 1, 1, 1}, {1, 0, 1, 0}, {1, 1, 0, 1}, {1, 0, 1, 0}, }; void showColors(int color[]) { cout << "Assigned Colors are: " <<endl; for (int i = 0; i < V; i++) cout << color[i] << " "; cout << endl; } bool isValid(int v,int color[], int c) { //check whether putting a color valid for v for (int i = 0; i < V; i++) if (graph[v][i] && c == color[i]) return false; return true; } bool graphColoring(int colors, int color[], int vertex) { if (vertex == V) //when all vertices are considered return true; for (int col = 1; col <= colors; col++) { if (isValid(vertex,color, col)) { //check whether color col is valid or not color[vertex] = col; if (graphColoring (colors, color, vertex+1) == true) //go for additional vertices return true; color[vertex] = 0; } } return false; //when no colors can be assigned } bool checkSolution(int m) { int *color = new int[V]; //make color matrix for each vertex for (int i = 0; i < V; i++) color[i] = 0; //initially set to 0 if (graphColoring(m, color, 0) == false) { //for vertex 0 check graph coloring cout << "Solution does not exist."; return false; } showColors(color); return true; } int main() { int colors = 3; // Number of colors checkSolution (colors); }
আউটপুট
Assigned Colors are: 1 2 3 2