graph
#include
#include "graph.h"
#include "err.h"
struct GraphRecord
{
int adj[max][max];
int visited[max];
int nodes;
};
Graph CreateGraph(int NodesCount)
{
Graph G;
G = malloc(sizeof(struct GraphRecord));
if(G == NULL) Error( "Out of space!!!" );
G->nodes = NodesCount;
return G;
}
void DisposeGraph(Graph G)
{
free(G);
}
/* a function to build adjacency matrix of a graph */
void buildadjm(Graph G)
{
int i,j;
for(i=0;inodes;i++)
for(j=0;jnodes;j++)
{
printf("enter 1 if there is an edge from %d to %d, otherwise enter 0 \n", i,j);
scanf("%d",&(G->adj[i][j]));
}
}
void printadjm(Graph G)
{
int i,j;
for(i=0;inodes;i++)
{
for(j=0;jnodes;j++)
printf(" %d",G->adj[i][j]);
putchar('\n');
}
}
void ClearVisited(Graph G)
{
int n;
for(n=0; nnodes; n++)
G->visited[n] = 0;
}
void dfs(Graph G)
{
int n;
for(n=0; nnodes; n++)
if(G->visited[n] ==0)
dfsr(n,G);
}
/* a function to visit the nodes in a depth-first order */
void dfsr(int x, Graph G)
{
int j;
printf("The node visited: %d\n",x);
G->visited[j]=1;
for(j=0;jnodes;j++)
if(G->adj[x][j] ==1 && G->visited[j] ==0)
dfsr(j,G);
}
#include <stdio.h>
#include "graph.h"
#include "fatal.h"
struct GraphRecord
{
int adj[max][max];
int visited[max];
int nodes;
};
Graph CreateGraph(int NodesCount)
{
Graph G;
G = malloc(sizeof(struct GraphRecord));
if(G == NULL) FatalError( "Out of space!!!" );
G->nodes = NodesCount;
return G;
}
void DisposeGraph(Graph G)
{
free(G);
}
/* a function to build adjacency matrix of a graph */
void buildadjm(Graph G)
{
int i,j;
for(i=0;i<G->nodes;i++)
for(j=0;j<G->nodes;j++)
{
printf("enter 1 if there is an edge from %d to %d, otherwise enter 0 \n", i,j);
scanf("%d",&(G->adj[i][j]));
}
}
void printadjm(Graph G)
{
int i,j;
for(i=0;i<G->nodes;i++)
{
for(j=0;j<G->nodes;j++)
printf(" %d",G->adj[i][j]);
putchar('\n');
}
}
void ClearVisited(Graph G)
{
int n;
for(n=0; n<G->nodes; n++)
G->visited[n] = 0;
}
void FillGraph(Graph G)
{
G->adj[0][0]=0;
G->adj[0][1]=0;
G->adj[0][2]=1;
G->adj[0][3]=0;
G->adj[1][0]=0;
G->adj[1][1]=0;
G->adj[1][2]=1;
G->adj[1][3]=1;
G->adj[2][0]=1;
G->adj[2][1]=1;
G->adj[2][2]=0;
G->adj[2][3]=0;
G->adj[3][0]=0;
G->adj[3][1]=1;
G->adj[3][2]=0;
G->adj[3][3]=0;
}
void dfs(Graph G)
{
int n;
for(n=0; n<G->nodes; n++){
if(G->visited[n] ==0){
dfsr(n,G);
}
}
}
void dfsr(int x, Graph G)
{
int j;
G->visited[x]=1;
printf("The node visited: %d\n",x);
for(j=0;j<G->nodes;j++)
if(G->adj[x][j] ==1 && G->visited[j] ==0)
dfsr(j,G);
}
void printEdge(int x, Graph G)
{
int j;
G->visited[x]=1;
for(j=0;j<G->nodes;j++)
if(G->adj[x][j] ==1 && G->visited[j] ==0){
printf("Edge: (%d,%d)\n",x,j);
printEdge(j,G);
}
}
void dfsst( Graph G){
int n;
ClearVisited(G);
for(n=0; n<G->nodes; n++){
if(G->visited[n] ==0){
printEdge(n,G);
}
}
}