Learnerslesson
   JAVA   
  SPRING  
  SPRINGBOOT  
 HIBERNATE 
  HADOOP  
   HIVE   
   ALGORITHMS   
   PYTHON   
   GO   
   KOTLIN   
   C#   
   RUBY   
   C++   




KOTLIN - ADJACENCY MATRIX CODE




Example :



class AdjacencyMatrixGraph {

    fun insertEdge(adjacentMatrix: Array<BooleanArray>, i: Int, j: Int) {

        adjacentMatrix[i][j] = true;

    }

    fun removeEdge(adjacentMatrix: Array<Array<Boolean>>, i: Int, j: Int) {

        adjacentMatrix[i][j] = false;

    }


    fun printAdjacencyMatrix(adjacentMatrix: Array<BooleanArray>) {

        for (i in 0..(adjacentMatrix.size-1)) {

            for (j in 0..(adjacentMatrix[i].size-1)) {

                var value = if (adjacentMatrix[i][j]) 1 else 0;
                print("|    $value     |");
            }
            println();
        }
    }
}

fun main(arr: Array<String>) {

    var adjacencyMatrixGraph = AdjacencyMatrixGraph();

    var V = 5;

    var adjacentMatrix = Array(V) { BooleanArray(V) };

    //Insert Edges

    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 0, 1);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 0, 2);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 0, 3);

    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 1, 0);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 1 ,4);

    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 2, 0);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 2, 3);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 2, 4);

    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 3, 0);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 3 ,2);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 3, 4);

    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 4, 3);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 4, 2);
    adjacencyMatrixGraph.insertEdge(adjacentMatrix, 4, 1);

    println("+----------------------------------------------------------+");
    adjacencyMatrixGraph.printAdjacencyMatrix(adjacentMatrix);
    println("+----------------------------------------------------------+");
}


Output :



   +----------------------------------------------------------+     | 0 || 1 || 1 || 1 || 0 |     | 1 || 0 || 0 || 0 || 1 |     | 1 || 0 || 0 || 1 || 1 |     | 1 || 0 || 1 || 0 || 1 |     | 0 || 1 || 1 || 1 || 0 |     +----------------------------------------------------------+

Code explanation for Adjacency Matrix Data Structure


The code for Adjacency Matrix is quite simple.


There are two important methods defined above :

  1. fun insertEdge(adjacentMatrix: Array<BooleanArray>, i: Int, j: Int)

  2. fun removeEdge(adjacentMatrix: Array<Array<Boolean>>, i: Int, j: Int)

As the name of the method suggests insertEdge(...), is used to add an Edge to the Adjacency Matrix.


Explanation of 'fun insertEdge(adjacentMatrix: Array<BooleanArray>, i: Int, j: Int)' method :


fun insertEdge(adjacentMatrix: Array<BooleanArray>, i: Int, j: Int) {

	adjacentMatrix[i][j] = true;
}

So, the actual adjacency matrix, we are going to create, looks like the below structure,

java_Collections

Now, if we look at the main(...) method. We create a 2D array, that holds either true or false.


var V = 5;
var adjacentMatrix = Array(V) { BooleanArray(V) };

So, the above line creates a 2D array with 5 rows and 5 columns that initially contains false.

java_Collections

Now, all we need to do is, wherever we want to insert an edge. We will mark it with value true.


Say, for example :


There is an edge in [0][1] (As mentioned in the adjacency matrix above).


All we are doing is, calling the fun insertEdge(...) method,


adjacencyMatrixGraph.insertEdge(adjacentMatrix, 0, 1);

and passing 0 and 1 as parameters.


And in the fun insertEdge(...) method, we have the below line,


adjacentMatrix[i][j] = true;

Now, since value of i = 0 and j = 1,


adjacentMatrix[0][1] = true;

And adjacentMatrix[0][1] is marked to true.

java_Collections

In other words, we have inserted an edge in adjacentMatrix[0][1] above.


Similarly, we insert the edges one by one, calling the fun insertEdge(...) method.


adjacencyMatrixGraph.insertEdge(adjacentMatrix, 0, 2);
adjacencyMatrixGraph.insertEdge(adjacentMatrix, 0, 3);
...
...
...

Explanation of 'fun removeEdge(adjacentMatrix: Array<Array<Boolean>>, i: Int, j: Int)' method :


Even, to delete an Edge, we follow the same steps.


As we know, there is an Edge in [0][2]. To remove it, all we need to do is call,


adjacencyMatrixGraph.removeEdge(adjacentMatrix, 0, 2);

And mark that particular location to false.


fun removeEdge(adjacentMatrix: Array<Array<Boolean>>, i: Int, j: Int) {

	adjacentMatrix[i][j] = false;
}

And the Edge is deleted.