Skip to content
Related Articles
Open in App
Not now

Related Articles

Transpose graph

Improve Article
Save Article
Like Article
  • Difficulty Level : Easy
  • Last Updated : 12 Aug, 2022
Improve Article
Save Article
Like Article

Transpose of a directed graph G is another directed graph on the same set of vertices with all of the edges reversed compared to the orientation of the corresponding edges in G. That is, if G contains an edge (u, v) then the converse/transpose/reverse of G contains an edge (v, u) and vice versa. Given a graph (represented as adjacency list), we need to find another graph which is the transpose of the given graph. 

Example:

Transpose graph

Transpose Graph

Input : figure (i) is the input graph.
Output : figure (ii) is the transpose graph of the given graph.

We traverse the adjacency list and as we find a vertex v in the adjacency list of vertex u which indicates an edge from u to v in main graph, we just add an edge from v to u in the transpose graph i.e. add u in the adjacency list of vertex v of the new graph. Thus traversing lists of all vertices of main graph we can get the transpose graph. Thus the total time complexity of the algorithm is O(V+E) where V is number of vertices of graph and E is the number of edges of the graph. Note : It is simple to get the transpose of a graph which is stored in adjacency matrix format, you just need to get the transpose of that matrix. 

Implementation:

C++




// CPP program to find transpose of a graph.
#include <bits/stdc++.h>
using namespace std;
 
// function to add an edge from vertex source to vertex dest
void addEdge(vector<int> adj[], int src, int dest)
{
    adj[src].push_back(dest);
}
 
// function to print adjacency list of a graph
void displayGraph(vector<int> adj[], int v)
{
    for (int i = 0; i < v; i++) {
        cout << i << "--> ";
        for (int j = 0; j < adj[i].size(); j++)
            cout << adj[i][j] << "  ";
        cout << "\n";
    }
}
 
// function to get Transpose of a graph taking adjacency
// list of given graph and that of Transpose graph
void transposeGraph(vector<int> adj[],
                     vector<int> transpose[], int v)
{
    // traverse the adjacency list of given graph and
    // for each edge (u, v) add an edge (v, u) in the
    // transpose graph's adjacency list
    for (int i = 0; i < v; i++)
        for (int j = 0; j < adj[i].size(); j++)
            addEdge(transpose, adj[i][j], i);
}
 
int main()
{
    int v = 5;
    vector<int> adj[v];
    addEdge(adj, 0, 1);
    addEdge(adj, 0, 4);
    addEdge(adj, 0, 3);
    addEdge(adj, 2, 0);
    addEdge(adj, 3, 2);
    addEdge(adj, 4, 1);
    addEdge(adj, 4, 3);
 
    // Finding transpose of graph represented
    // by adjacency list adj[]
    vector<int> transpose[v];
    transposeGraph(adj, transpose, v);
 
    // displaying adjacency list of transpose
    // graph i.e. b
    displayGraph(transpose, v);
 
    return 0;
}


Java




// Java program to find the transpose of a graph
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Graph
{
    // Total number of vertices
    private static int vertices = 5;
     
    // Find transpose of graph represented by adj
    private static ArrayList<Integer>[] adj = new ArrayList[vertices];
    
    // Store the transpose of graph represented by tr
    private static ArrayList<Integer>[] tr = new ArrayList[vertices];
 
    // Function to add an edge from source vertex u to
    // destination vertex v, if choice is false the edge is added
    // to adj otherwise the edge is added to tr
    public static void addedge(int u, int v, boolean choice)
    {
        if(!choice)
            adj[u].add(v);
        else
            tr[u].add(v);
    }
 
    // Function to print the graph representation
    public static void printGraph()
    {
        for(int i = 0; i < vertices; i++)
        {
            System.out.print(i + "--> ");
            for(int j = 0; j < tr[i].size(); j++)
                System.out.print(tr[i].get(j) + " ");
            System.out.println();
        }
    }
 
    // Function to print the transpose of
    // the graph represented as adj and store it in tr
    public static void getTranspose()
    {
 
        // Traverse the graph and for each edge u, v
        // in graph add the edge v, u in transpose
        for(int i = 0; i < vertices; i++)
            for(int j = 0; j < adj[i].size(); j++)
                addedge(adj[i].get(j), i, true);
    }
 
    public static void main (String[] args) throws java.lang.Exception
    {
        for(int i = 0; i < vertices; i++)
        {
            adj[i] = new ArrayList<Integer>();
            tr[i] = new ArrayList<Integer>();
        }
        addedge(0, 1, false);
        addedge(0, 4, false);
        addedge(0, 3, false);
        addedge(2, 0, false);
        addedge(3, 2, false);
        addedge(4, 1, false);
        addedge(4, 3, false);
         
        // Finding transpose of the graph
        getTranspose();
         
        // Printing the graph representation
        printGraph();
    }
}
 
// This code is contributed by code_freak


Python3




# Python3 program to find transpose of a graph.
 
# function to add an edge from vertex
# source to vertex dest
def addEdge(adj, src, dest):
    adj[src].append(dest)
 
# function to print adjacency list
# of a graph
def displayGraph(adj, v):
    for i in range(v):
        print(i, "--> ", end = "")
        for j in range(len(adj[i])):
            print(adj[i][j], end = " ")
        print()
 
# function to get Transpose of a graph
# taking adjacency list of given graph
# and that of Transpose graph
def transposeGraph(adj, transpose, v):
     
    # traverse the adjacency list of given
    # graph and for each edge (u, v) add
    # an edge (v, u) in the transpose graph's
    # adjacency list
    for i in range(v):
        for j in range(len(adj[i])):
            addEdge(transpose, adj[i][j], i)
 
# Driver Code
if __name__ == '__main__':
 
    v = 5
    adj = [[] for i in range(v)]
    addEdge(adj, 0, 1)
    addEdge(adj, 0, 4)
    addEdge(adj, 0, 3)
    addEdge(adj, 2, 0)
    addEdge(adj, 3, 2)
    addEdge(adj, 4, 1)
    addEdge(adj, 4, 3)
 
    # Finding transpose of graph represented
    # by adjacency list adj[]
    transpose = [[]for i in range(v)]
    transposeGraph(adj, transpose, v)
 
    # displaying adjacency list of
    # transpose graph i.e. b
    displayGraph(transpose, v)
 
# This code is contributed by PranchalK


C#




// C# program to find the transpose of a graph
using System;
using System.Collections.Generic;
 
class Graph
{
    // Total number of vertices
    private static int vertices = 5;
     
    // Find transpose of graph represented by adj
    private static List<int>[] adj = new List<int>[vertices];
     
    // Store the transpose of graph represented by tr
    private static List<int>[] tr = new List<int>[vertices];
 
    // Function to add an edge from source vertex u to
    // destination vertex v, if choice is false the edge is added
    // to adj otherwise the edge is added to tr
    public static void addedge(int u, int v, bool choice)
    {
        if(!choice)
            adj[u].Add(v);
        else
            tr[u].Add(v);
    }
 
    // Function to print the graph representation
    public static void printGraph()
    {
        for(int i = 0; i < vertices; i++)
        {
            Console.Write(i + "--> ");
            for(int j = 0; j < tr[i].Count; j++)
                Console.Write(tr[i][j] + " ");
            Console.WriteLine();
        }
    }
 
    // Function to print the transpose of
    // the graph represented as adj and store it in tr
    public static void getTranspose()
    {
 
        // Traverse the graph and for each edge u, v
        // in graph add the edge v, u in transpose
        for(int i = 0; i < vertices; i++)
            for(int j = 0; j < adj[i].Count; j++)
                addedge(adj[i][j], i, true);
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        for(int i = 0; i < vertices; i++)
        {
            adj[i] = new List<int>();
            tr[i] = new List<int>();
        }
        addedge(0, 1, false);
        addedge(0, 4, false);
        addedge(0, 3, false);
        addedge(2, 0, false);
        addedge(3, 2, false);
        addedge(4, 1, false);
        addedge(4, 3, false);
         
        // Finding transpose of the graph
        getTranspose();
         
        // Printing the graph representation
        printGraph();
    }
}
 
 
// This code is contributed by Rajput-Ji


Javascript




<script>
// Javascript program to find transpose of a graph.
 
// function to add an edge from vertex
// source to vertex dest
function addEdge(adj, src, dest) {
  adj[src].push(dest)
}
 
// function to print adjacency list
// of a graph
function displayGraph(adj, v) {
  for (let i = 0; i < v; i++) {
    document.write(i + "--> ")
    for (let j = 0; j < adj[i].length; j++) {
      document.write(adj[i][j] + " ")
    }
    document.write("<br>")
  }
}
 
// function to get Transpose of a graph
// taking adjacency list of given graph
// and that of Transpose graph
function transposeGraph(adj, transpose, v) {
 
  // traverse the adjacency list of given
  // graph and for each edge (u, v) add
  // an edge (v, u) in the transpose graph's
  // adjacency list
  for (let i = 0; i < v; i++)
    for (let j = 0; j < adj[i].length; j++)
      addEdge(transpose, adj[i][j], i)
}
 
// Driver Code
let v = 5
let adj = new Array(v).fill(0).map(() => new Array())
addEdge(adj, 0, 1)
addEdge(adj, 0, 4)
addEdge(adj, 0, 3)
addEdge(adj, 2, 0)
addEdge(adj, 3, 2)
addEdge(adj, 4, 1)
addEdge(adj, 4, 3)
 
// Finding transpose of graph represented
// by adjacency list adj[]
let transpose = new Array(v).fill(0).map(() => new Array())
transposeGraph(adj, transpose, v)
 
// displaying adjacency list of
// transpose graph i.e. b
displayGraph(transpose, v)
 
// This code is contributed by Saurabh Jaiswal
 
</script>


Output

0--> 2  
1--> 0  4  
2--> 3  
3--> 0  4  
4--> 0  

My Personal Notes arrow_drop_up
Like Article
Save Article
Related Articles

Start Your Coding Journey Now!