Advertisement
Guest User

bfsdfs

a guest
May 24th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.03 KB | None | 0 0
  1. /* C program to implement BFS(breadth-first search) and DFS(depth-first search) algorithm */
  2.  
  3. #include<stdio.h>
  4.  
  5. int q[20],top=-1,front=-1,rear=-1,a[20][20],vis[20],stack[20];
  6. int delete();
  7. void add(int item);
  8. void bfs(int s,int n);
  9. void dfs(int s,int n);
  10. void push(int item);
  11. int pop();
  12.  
  13. void main()
  14. {
  15.     int n,i,s,ch,j;
  16.     char c,dummy;
  17.     printf("ENTER THE NUMBER VERTICES ");
  18.     scanf("%d",&n);
  19.     for(i=1; i<=n; i++)
  20.     {
  21.         for(j=1; j<=n; j++)
  22.         {
  23.             printf("ENTER 1 IF %d HAS A NODE WITH %d ELSE 0 ",i,j);
  24.             scanf("%d",&a[i][j]);
  25.         }
  26.     }
  27.     printf("THE ADJACENCY MATRIX IS\n");
  28.     for(i=1; i<=n; i++)
  29.     {
  30.         for(j=1; j<=n; j++)
  31.         {
  32.             printf(" %d",a[i][j]);
  33.         }
  34.         printf("\n");
  35.     }
  36.  
  37.     do
  38.     {
  39.         for(i=1; i<=n; i++)
  40.             vis[i]=0;
  41.         printf("\nMENU");
  42.         printf("\n1.B.F.S");
  43.         printf("\n2.D.F.S");
  44.         printf("\nENTER YOUR CHOICE");
  45.         scanf("%d",&ch);
  46.         printf("ENTER THE SOURCE VERTEX :");
  47.         scanf("%d",&s);
  48.  
  49.         switch(ch)
  50.         {
  51.         case 1:
  52.             bfs(s,n);
  53.             break;
  54.         case 2:
  55.             dfs(s,n);
  56.             break;
  57.         }
  58.         printf("DO U WANT TO CONTINUE(Y/N) ? ");
  59.         scanf("%c",&dummy);
  60.         scanf("%c",&c);
  61.     }
  62.     while((c=='y')||(c=='Y'));
  63. }
  64.  
  65.  
  66. //**************BFS(breadth-first search) code**************//
  67. void bfs(int s,int n)
  68. {
  69.     int p,i;
  70.     add(s);
  71.     vis[s]=1;
  72.     p=delete();
  73.     if(p!=0)
  74.         printf(" %d",p);
  75.     while(p!=0)
  76.     {
  77.         for(i=1; i<=n; i++)
  78.             if((a[p][i]!=0)&&(vis[i]==0))
  79.             {
  80.                 add(i);
  81.                 vis[i]=1;
  82.             }
  83.         p=delete();
  84.         if(p!=0)
  85.             printf(" %d ",p);
  86.     }
  87.     for(i=1; i<=n; i++)
  88.         if(vis[i]==0)
  89.             bfs(i,n);
  90. }
  91.  
  92.  
  93. void add(int item)
  94. {
  95.     if(rear==19)
  96.         printf("QUEUE FULL");
  97.     else
  98.     {
  99.         if(rear==-1)
  100.         {
  101.             q[++rear]=item;
  102.             front++;
  103.         }
  104.         else
  105.             q[++rear]=item;
  106.     }
  107. }
  108. int delete()
  109. {
  110.     int k;
  111.     if((front>rear)||(front==-1))
  112.         return(0);
  113.     else
  114.     {
  115.         k=q[front++];
  116.         return(k);
  117.     }
  118. }
  119.  
  120.  
  121. //***************DFS(depth-first search) code******************//
  122. void dfs(int s,int n)
  123. {
  124.     int i,k;
  125.     push(s);
  126.     vis[s]=1;
  127.     k=pop();
  128.     if(k!=0)
  129.         printf(" %d ",k);
  130.     while(k!=0)
  131.     {
  132.         for(i=1; i<=n; i++)
  133.             if((a[k][i]!=0)&&(vis[i]==0))
  134.             {
  135.                 push(i);
  136.                 vis[i]=1;
  137.             }
  138.         k=pop();
  139.         if(k!=0)
  140.             printf(" %d ",k);
  141.     }
  142.     for(i=1; i<=n; i++)
  143.         if(vis[i]==0)
  144.             dfs(i,n);
  145. }
  146. void push(int item)
  147. {
  148.     if(top==19)
  149.         printf("Stack overflow ");
  150.     else
  151.         stack[++top]=item;
  152. }
  153. int pop()
  154. {
  155.     int k;
  156.     if(top==-1)
  157.         return(0);
  158.     else
  159.     {
  160.         k=stack[top--];
  161.         return(k);
  162.     }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement