# Transpose graph

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.

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