C Program for Traversing a Directed Graph through DFS each vertex assigned discovery and finishing time

By | 23.06.2017

Directed Graph through DFS each vertex assigned discovery and finishing time


Write a C Program for Traversing a Directed Graph through DFS recursively, each vertex assigned discovery and finishing time. Here’s simple Program for Traversing a Directed Graph through DFS each vertex is assigned a discovery and finishing time.


Depth First Search (DFS)


Depth First Search (DFS) algorithm traverses a graph in a depthward motion and uses a stack to remember to get the next vertex to start a search, when a dead end occurs in any iteration.

It employs the following rules.

  • Rule 1 − Visit the adjacent unvisited vertex. Mark it as visited. Display it. Push it in a stack.
  • Rule 2 − If no adjacent vertex is found, pop up a vertex from the stack. (It will pop up all the vertices from the stack, which do not have adjacent vertices.)
  • Rule 3 − Repeat Rule 1 and Rule 2 until the stack is empty.

We shall not see the implementation of Depth First Traversal (or Depth First Search) in C programming language


Also Read : : C Program for traversing a Directed Graph through DFS recursively

Below is the source code for C Program for Traversing a Directed Graph through DFS recursively, with comments displayed in output which is successfully compiled and run on Windows System to produce desired output as shown below :


SOURCE CODE : :


/*  C Program for traversing a directed graph through DFS recursively,
  each vertex is assigned a discovery and a finishing time  */

#include<stdio.h>
#define MAX 50

#define initial 1
#define visited 2
#define finished 3

int n;    /*Number of vertices in the graph */
int adj[MAX][MAX];
void create_graph( );

int state[MAX];
int time;
int d[MAX];
int f[MAX];

void DF_Traversal();
void DFS(int v);

int main()
{
        int i;
        create_graph();
        DF_Traversal();

        for(i=0; i<n; i++)
                printf("\nVertex %d, Discovery time - %d, Finshing time - %d\n", i, d[i], f[i]);

                return 0;
}/*End of main()*/

void DF_Traversal()
{
        int v;

        for(v=0; v<n; v++)
                state[v]=initial;

        printf("\nEnter starting vertex for Depth First Search : ");
        scanf("%d",&v);
        DFS(v);
        for(v=0; v<n; v++)
        {
                if(state[v] == initial)
                        DFS(v);
        }
        printf("\n");
}/*End of DF_Traversal( )*/

void DFS(int v)
{
        int i;
        time++;

        d[v] = time;    /*discovery time*/
        state[v] = visited;
        printf("%d ", v);
        for(i=0; i<n; i++)
        {
                if(adj[v][i]==1)
                {
                        if(state[i]==initial)
                                DFS(i);
                }
        }
        state[v] = finished;
        f[v] = ++time;  /*Finishing time*/
}/*End of DFS()*/


void create_graph()
{
        int i,max_edges,origin,destin;

        printf("\nEnter number of vertices : ");
        scanf("%d",&n);
        max_edges=n*(n-1);

        for(i=1;i<=max_edges;i++)
        {
                printf("\nEnter edge %d( -1 -1 to quit ) : ",i);
                scanf("%d %d",&origin,&destin);

                if( (origin == -1) && (destin == -1) )
                        break;

                if( origin>=n || destin>=n || origin<0 || destin<0)
                {
                        printf("\nInvalid edge!\n");
                        i--;
                }
                else
                {
                        adj[origin][destin] = 1;
                }
        }
}

OUTPUT : :


/*  C Program for traversing a directed graph through DFS recursively,
  each vertex is assigned a discovery and a finishing time  */


Enter number of vertices : 6

Enter edge 1( -1 -1 to quit ) : 0 1

Enter edge 2( -1 -1 to quit ) : 0 2

Enter edge 3( -1 -1 to quit ) : 0 3

Enter edge 4( -1 -1 to quit ) : 1 3

Enter edge 5( -1 -1 to quit ) : 3 4

Enter edge 6( -1 -1 to quit ) : 2 4

Enter edge 7( -1 -1 to quit ) : 2 5

Enter edge 8( -1 -1 to quit ) : -1 -1

Enter starting vertex for Depth First Search : 0
0 1 3 4 2 5

Vertex 0, Discovery time - 1, Finshing time - 12

Vertex 1, Discovery time - 2, Finshing time - 7

Vertex 2, Discovery time - 8, Finshing time - 11

Vertex 3, Discovery time - 3, Finshing time - 6

Vertex 4, Discovery time - 4, Finshing time - 5

Vertex 5, Discovery time - 9, Finshing time - 10

Process returned 0

If you found any error or any queries related to the above program or any questions or reviews , you wanna to ask from us ,you may Contact Us through our contact Page or you can also comment below in the comment section.We will try our best to reach up to you in short interval.


Thanks for reading the post…


Recommended Posts : :

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments