Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <stack>
- bool isSafe(int n, int* graph, int vertex_nb, int* colors, int c)
- {
- for(int i=0; i<n; i++)
- {
- if(graph[n*vertex_nb+i] && c == colors[i])
- {
- return false;
- }
- }
- return true;
- }
- bool graphColoringUtil(int* graph, int vertex_nb, int colors_nb, int* colors, int n)
- {
- bool all_colored = true;
- for(int i = 0; i < vertex_nb; i++)
- {
- if(!colors[i])
- all_colored = false;
- }
- if(all_colored)
- return true;
- for(int c = 1; c <= colors_nb; c++)
- {
- if(isSafe(n, graph, vertex_nb, colors, c))
- {
- colors[n] = c;
- if(graphColoringUtil(graph, vertex_nb, colors_nb, colors, n+1))
- {
- return true;
- }
- colors[n] = 0;
- }
- }
- return false;
- }
- int main()
- {
- int tests = 0;
- scanf("%d", &tests);
- for(int t = 0; t < tests; t++)
- {
- int vertex_nb = 0, colors_nb = 0;
- scanf("%d %d", &vertex_nb, &colors_nb);
- int graph[vertex_nb][vertex_nb] = {0};
- for(int i = 0; i < vertex_nb; i++)
- for(int j = 0; j < vertex_nb; j++)
- scanf("%d", &graph[i][j]);
- int colors[vertex_nb] = {0};
- if(graphColoringUtil(graph[0], vertex_nb, colors_nb, colors, 0))
- {
- for(int i = 0; i < vertex_nb; i++)
- printf("%d ", colors[i]);
- puts("");
- }
- else
- {
- puts("No solution!");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement