Transpose graph

03 Jun, 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:
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. 
C++
Java
Python3
C#
Javascript
// 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 destvoid addEdge(vector<int> adj[], int src, int dest){    adj[src].push_back(dest);} // function to print adjacency list of a graphvoid 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 graphvoid 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 program to find the transpose of a graphimport 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 program to find transpose of a graph. # function to add an edge from vertex# source to vertex destdef addEdge(adj, src, dest):    adj[src].append(dest) # function to print adjacency list# of a graphdef 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 graphdef 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 Codeif __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# program to find the transpose of a graphusing 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
<script>// Javascript program to find transpose of a graph. // function to add an edge from vertex// source to vertex destfunction addEdge(adj, src, dest) {  adj[src].push(dest)} // function to print adjacency list// of a graphfunction 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 graphfunction 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 Codelet v = 5let 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. bdisplayGraph(transpose, v) // This code is contributed by Saurabh Jaiswal </script>
0--> 2  
1--> 0  4  
2--> 3  
3--> 0  4  
4--> 0
PranchalKatiyar
code_freak
Rajput-Ji
simmytarika5
_saurabh_jaiswal
graph-basics
Graph
Graph
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Dijkstra's shortest path algorithm | Greedy Algo-7
Find if there is a path between two vertices in a directed graph
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Detect Cycle in a Directed Graph
Introduction to Data Structures
Find if there is a path between two vertices in an undirected graph
Bellman–Ford Algorithm | DP-23
What is Data Structure: Types, Classifications and Applications
Minimum number of swaps required to sort an array
m Coloring Problem | Backtracking-5