 Open in App
Not now

# Transpose graph

• Difficulty Level : Easy
• Last Updated : 12 Aug, 2022

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.```

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 ` `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 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

 ``

Output

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

My Personal Notes arrow_drop_up
Related Articles