Program Coding
// Include necessary headers int main() { int ichoice,i,no=0,j; int **graph=NULL; char *symbl=NULL,gt,c,src,dest; int getindex(char *,char ,int ); do{ printf("\n\n\tGraph\n"); printf("\n\t 1 to Create Graph \n"); printf("\n\t 2 to Depth First Search \n"); printf("\n\t 3 to Breath First Search\n"); printf("\n\t 4 to Exit the program \n"); printf("\n Your Choice -> "); scanf("%d",&ichoice); switch(ichoice) { case 1: if(graph!=NULL) { for(i=0;i<no;i++)
free(graph[i]); free(graph); free(symbl); } printf("\n\tHow many nodes -> "); scanf("%d",&no); graph = malloc(no*sizeof(int *)); symbl = malloc(no*sizeof(char)); for(i=0;i<no;i++) graph[i] = (int *)malloc(no*sizeof(int)); printf("\n\nGraph Type Directed or undirected -> "); getchar(); gt = getchar();
printf("\n\tEnter Nodes Avoid Repetition\n\t"); for(i=0;i<no;i++) { scanf(" %c",&c); symbl[i] = c; } printf("\n\nEnter Edge pair\n"); while(1) { scanf(" %c %c",&src,&dest); i=getindex(symbl,src,no); j=getindex(symbl,dest,no); if(i==-1||j==-1) break; if(gt =='d' || gt== 'D') graph[i][j]=1; else graph[i][j]=graph[j][i]=1; } printf("\n\nEdges created\n\n"); break;
case 2: dfs(graph,symbl,no); break; case 3: bfs(graph,symbl,no); break; case 4: exit(0); } }while(1); return 0; } int getindex(char *sy,char c,int n) {
int i; for(i=0;i<n;i++){
if(sy[i]==c)
return i;
} return -1; } bfs(int **graph,char *symb,int n) { int x=0,*visited,i,que[20]; int front=-1,rear=-1; char cc; visited = (int *) malloc(sizeof(int) * n); //Get Where to begin printf("\n\nWhere to Begin Traverse\n"); getchar(); cc = getchar(); x=getindex(symb,cc,n); if(x==-1) { printf("\n\n\tInvalid Node...."); return; }
for(i=0;i<n;i++)
visited[i]=0; printf("\n\nBreath First Traversal\n"); printf("%c ",symb[x]); visited[x]=1; rear++;
front++; que[rear]=x; while( front <= rear ) { x = que[front]; front ++;
for(i=0;i<n;i++) { if( (graph[x][i] == 1) && (visited[i] == 0) ) { printf("%c ",symb[i]); visited[i]=1; rear++; que[rear]=i; } } } } dfs(int **graph,char *symb,int n) { int i,top=-1,stack[20],pop_v,j,t,*visited; int x=0; char cc; visited = (int *) malloc(sizeof(int ) * n);
for(i=0;i<n;i++) visited[i] = 0;
printf("\n\nWhere to Begin Traverse\n"); getchar(); cc = getchar(); x = getindex(symb,cc,n); if(x==-1) { printf("\n\tInvalid Node..."); return ; } top++; stack[top] = x; printf("\n\nDepth First Traversal\n"); while( top >= 0) { pop_v = stack[top]; top--; if( visited[pop_v] == 0) { printf("%c ",symb[pop_v]); visited[pop_v] = 1; } else continue;
for(i=n-1;i>=0;i--) { if( (graph[pop_v][i] == 1) && (visited[i] == 0) ) { top++; stack[top]=i; } }
} }The author is not liable for any discrepancies......
No comments:
Post a Comment