# 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; ` `} ` |

*chevron_right*

*filter_none*

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

**Output:**

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

## Recommended Posts:

- Convert the undirected graph into directed graph such that there is no path of length greater than 1
- Detect cycle in the graph using degrees of nodes of graph
- Graph implementation using STL for competitive programming | Set 2 (Weighted graph)
- BFS for Disconnected Graph
- Hypercube Graph
- Sum of dependencies in a graph
- Dominant Set of a Graph
- Islands in a graph using BFS
- Bridges in a graph
- Biconnected graph
- Graph and its representations
- Fibonacci Cube Graph
- A Peterson Graph Problem
- Check for star graph
- Graph representations using set and hash

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.