Tuesday, November 19, 2024
Google search engine
HomeLanguagesJavaJava Program to Implement the Vizing’s Theorem

Java Program to Implement the Vizing’s Theorem

Vizing’s Theorem of graph theory states that every simple undirected graph has a chromatic index of one larger than the maximum degree ‘d’ of the graph. In simple meaning, the theorem states that the chromatic index can be either ‘d’ or ‘d’+1. 

Chromatic Index of a graph is the minimum number of colors required to color the edges of the graph such that any two edges that share the same vertex have different colors.

Examples:

Input:

Output:

Chromatic Index = 3

Edge from 1 to 2 : Color 1

Edge from 2 to 3 : Color 2

Edge from 3 to 4 : Color 1

Edge from 4 to 1 : Color 2

Edge from 1 to 3 : Color 3

Algorithm:

Below is the step-by-step approach of the algorithm:-

  • Initialize the number of edges and the edge list.
  • Color the graph according to the Vizing’s Theorem.
  • Assign a color to an edge and check if any adjacent edges have the same color or not.
  • If any adjacent edge has the same color, then increment the color to try the next color for that edge.
  • Repeat till all the edges get it’s color according to the theorem.
  • Once done print the maximum value of color for all the edges and the colors of every edge.

Implementation of the above approach: 

Java




// Java program to Implement
// Vizing's Theorem
  
import java.util.*;
  
public class chromaticIndex {
  
    // Function to find the chromatic index
    public void edgeColoring(int[][] edges, int e)
    {
        // Initialize edge to first
        // edge and color to color 1
        int i = 0, color = 1;
  
        // Repeat until all edges are done coloring
        while (i < e) {
  
            // Give the selected edge a color
            edges[i][2] = color;
  
            boolean flag = false;
  
            // Iterate through all others edges to check
            for (int j = 0; j < e; j++) {
  
                // Ignore if same edge
                if (j == i)
                    continue;
  
                // Check if one vertex is similar
                if ((edges[i][0] == edges[j][0])
                    || (edges[i][1] == edges[j][0])
                    || (edges[i][0] == edges[j][1])
                    || (edges[i][1] == edges[j][1])) {
  
                    // Check if color is similar
                    if (edges[i][2] == edges[j][2]) {
  
                        // Increment the color by 1
                        color++;
                        flag = true;
                        break;
                    }
                }
            }
  
            // If same color faced then repeat again
            if (flag == true) {
                continue;
            }
  
            // Or else proceed to a new vertex with color 1
            color = 1;
            i++;
        }
  
        // Check the maximum color from all the edge colors
        int maxColor = -1;
        for (i = 0; i < e; i++) {
            maxColor = Math.max(maxColor, edges[i][2]);
        }
  
        // Print the chromatic index
        System.out.println("Chromatic Index = " + maxColor);
        
        for (i = 0; i < e; i++)
        {
            System.out.println("Edge from " + edges[i][0]
                               + " to " + edges[i][1]
                               + " : Color " + edges[i][2]);
        }
    }
  
    // Driver code
    public static void main(String[] args)
    {
  
        // Number of edges
        int e = 5;
  
        // Edge list
        int[][] edges = new int[e][3];
  
        // Initialize all edge colors to 0
        for (int i = 0; i < e; i++) {
            edges[i][2] = -1;
        }
  
        // Edges
        edges[0][0] = 1;
        edges[0][1] = 2;
  
        edges[1][0] = 2;
        edges[1][1] = 3;
  
        edges[2][0] = 3;
        edges[2][1] = 4;
  
        edges[3][0] = 4;
        edges[3][1] = 1;
  
        edges[4][0] = 1;
        edges[4][1] = 3;
  
        // Run the function
        chromaticIndex c = new chromaticIndex();
        c.edgeColoring(edges, e);
    }
}


Output

Chromatic Index = 3
Edge from 1 to 2 : Color 1
Edge from 2 to 3 : Color 2
Edge from 3 to 4 : Color 1
Edge from 4 to 1 : Color 2
Edge from 1 to 3 : Color 3
RELATED ARTICLES

Most Popular

Recent Comments