104 lines
3.4 KiB
C
104 lines
3.4 KiB
C
//... A Program to represent a Graph by using an Adjacency Matrix method
|
||
|
||
/*
|
||
This C program generates graph using Adjacency Matrix Method.
|
||
A graph G,consists of two sets V and E. V is a finite non-empty set of vertices.E is a set of pairs of vertices,these pairs are called as edges V(G) and E(G) will represent the sets of vertices and edges of graph G.
|
||
Undirected graph – It is a graph with V vertices and E edges where E edges are undirected. In undirected graph, each edge which is present between the vertices Vi and Vj,is represented by using a pair of round vertices (Vi,Vj).
|
||
Directed graph – It is a graph with V vertices and E edges where E edges are directed.In directed graph,if Vi and Vj nodes having an edge.than it is represented by a pair of triangular brackets Vi,Vj.
|
||
*/
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
void main()
|
||
{
|
||
int option;
|
||
do
|
||
{
|
||
printf("\n A Program to represent a Graph by using an ");
|
||
printf("Adjacency Matrix method \n ");
|
||
printf("\n 1. Directed Graph ");
|
||
printf("\n 2. Un-Directed Graph ");
|
||
printf("\n 3. Exit ");
|
||
printf("\n\n Select a proper option : ");
|
||
scanf("%d", &option);
|
||
switch(option)
|
||
{
|
||
case 1 :
|
||
dir_graph();
|
||
break;
|
||
case 2 :
|
||
undir_graph();
|
||
break;
|
||
case 3 :
|
||
exit(0);
|
||
} // switch
|
||
}
|
||
while(1);
|
||
}
|
||
|
||
int dir_graph()
|
||
{
|
||
int adj_mat[50][50];
|
||
int n;
|
||
int in_deg, out_deg, i, j;
|
||
printf("\n How Many Vertices ? : ");
|
||
scanf("%d", &n);
|
||
read_graph(adj_mat, n);
|
||
printf("\n Vertex \t In_Degree \t Out_Degree \t Total_Degree ");
|
||
for (i = 1; i <= n ; i++ )
|
||
{
|
||
in_deg = out_deg = 0;
|
||
for ( j = 1 ; j <= n ; j++ )
|
||
{
|
||
if ( adj_mat[j][i] == 1 )
|
||
in_deg++;
|
||
}
|
||
for ( j = 1 ; j <= n ; j++ )
|
||
if (adj_mat[i][j] == 1 )
|
||
out_deg++;
|
||
printf("\n\n %5d\t\t\t%d\t\t%d\t\t%d\n\n",i,in_deg,out_deg,in_deg+out_deg);
|
||
}
|
||
return;
|
||
}
|
||
|
||
int undir_graph()
|
||
{
|
||
int adj_mat[50][50];
|
||
int deg, i, j, n;
|
||
printf("\n How Many Vertices ? : ");
|
||
scanf("%d", &n);
|
||
read_graph(adj_mat, n);
|
||
printf("\n Vertex \t Degree ");
|
||
for ( i = 1 ; i <= n ; i++ )
|
||
{
|
||
deg = 0;
|
||
for ( j = 1 ; j <= n ; j++ )
|
||
if ( adj_mat[i][j] == 1)
|
||
deg++;
|
||
printf("\n\n %5d \t\t %d\n\n", i, deg);
|
||
}
|
||
return;
|
||
}
|
||
|
||
int read_graph ( int adj_mat[50][50], int n )
|
||
{
|
||
int i, j;
|
||
char reply;
|
||
for ( i = 1 ; i <= n ; i++ )
|
||
{
|
||
for ( j = 1 ; j <= n ; j++ )
|
||
{
|
||
if ( i == j )
|
||
{
|
||
adj_mat[i][j] = 0;
|
||
continue;
|
||
}
|
||
printf("\n Vertices %d & %d are Adjacent ? (Y/N) :",i,j);
|
||
scanf("%c", &reply);
|
||
if ( reply == 'y' || reply == 'Y' )
|
||
adj_mat[i][j] = 1;
|
||
else
|
||
adj_mat[i][j] = 0;
|
||
}
|
||
}
|
||
return;
|
||
} |