Advertisement
apl-mhd

BFS

Apr 8th, 2017
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <iostream>
  4. #include <cstdio>
  5. #include <string>
  6. #include <cstring>
  7. #include <string.h>
  8. using  namespace std;
  9. struct list {
  10.     int val;
  11.     struct list * next;
  12. };
  13.  
  14.  
  15. typedef struct list node;
  16.  
  17. node *Insert(node *head, int edg){
  18.        
  19.         node *temp;
  20.         temp = new node();
  21.         temp->val = edg;
  22.         temp->next = head;
  23.         return temp;
  24.    
  25. }
  26.  
  27.  
  28. void BFS(node *graph[], int vertices, int parent[], int level[]){
  29.        
  30.         int flag=1, par, lev=0,i;
  31.         level[1] = lev;
  32.         node *temp;
  33.         while(flag){
  34.             flag=0;
  35.            
  36.             for(i=1; i<=vertices; i++){
  37.                
  38.                 if(level[i] == lev){
  39.                     flag = 1;
  40.                     temp = graph[i];
  41.                     par=i;
  42.                    
  43.                    
  44.                     while(temp!=NULL){
  45.                        
  46.                             if(level[temp->val] !=-1){
  47.                                 temp = temp->next;
  48.                                 continue;
  49.                             }
  50.                            
  51.                             level[temp->val] = lev+1;
  52.                             cout<<"x";
  53.                             parent[temp->val] = par;
  54.                             temp=temp->next;                               
  55.                         }
  56.                 }
  57.                
  58.             }
  59.            
  60.         ++lev;     
  61.     }
  62.        
  63.        
  64. }
  65.  
  66. int main(){
  67. int vertices, v1,v2,i, edges;
  68.  
  69.     cout<<"enter number of vertices:";
  70.         cin>>vertices;
  71.     cout<<"number of edges:";
  72.         cin>>edges;
  73.    
  74.     int level[vertices+1] , parent[vertices+1];
  75.    
  76.     node *vertex[vertices+1] = {NULL};
  77.    
  78.    
  79.     for(i=0; i<=vertices; i++){
  80.        
  81.         level[i] = -1;
  82.         parent[i] = 0;
  83.         }
  84.    
  85.     for(i=1; i<=vertices; i++){
  86.        
  87.         cin>>v1>>v2;
  88.        
  89.         vertex[v1] = Insert(vertex[v1], v2);
  90.         vertex[v2] = Insert(vertex[v2], v1);
  91.        
  92.        
  93.         }
  94.        
  95.     for (i = 1; i <= vertices; ++i) {
  96.         printf("%d -> ", i);
  97.  
  98.          node * temp = vertex[i];
  99.  
  100.         while (temp != NULL) {
  101.             printf("%d -> ", temp->val);
  102.             temp = temp->next;
  103.         }
  104.  
  105.         printf("NULL\n");
  106.     }
  107.  
  108.  
  109.    
  110.    
  111.    
  112.    
  113.    
  114.     BFS(vertex, vertices,parent,level);
  115.    
  116.     for (i = 1; i <= vertices; ++i) {
  117.         printf("Level of Node %d is %d, Parent is %d\n", i, level[i], parent[i]);
  118.     }
  119.  
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement