Skip to content
Related Articles
Transpose graph
• Difficulty Level : Easy
• Last Updated : 17 Feb, 2020

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:

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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.

## C++

 `// CPP program to find transpose of a graph.``#include ``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[] adj = ``new` `ArrayList[vertices];``    ` `    ``// Store the transpose of graph represented by tr``    ``private` `static` `ArrayList[] 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();``            ``tr[i] = ``new` `ArrayList();``        ``}``        ``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 pradjacency 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`
Output:
```0--> 2
1--> 0  4
2--> 3
3--> 0  4
4--> 0
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up