Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Wrong Output, Cant catch the mistake (DFS)

Wrong Output, Cant catch the mistake (DFS)

Scheduled Pinned Locked Moved C / C++ / MFC
data-structuresdebuggingtutorial
15 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Z zeego

    Hi I made the following program for depth first search but I am having wrong path. Can anyone catch or tell me what I am doing wrong here. I dont know much how to use the debugger in turbo c professional. Thanks and regards, Mike. #include <stdio.h> #include <conio.h> #define MAX 6 // Node/Vertex count int adj[MAX][MAX]={ // Adjacency Matrix 2x2 {0,1,1,1,0,0}, {1,0,0,0,1,1}, {1,0,0,0,0,0}, {1,0,0,0,0,0}, {0,1,0,0,0,0}, {0,1,1,0,0,0} }; int visited[MAX]; // Visited array void bfs(int goal); // bfs function int main () { int g=5; //set Goal node clrscr(); printf("The nodes order is "); bfs(g); return 0; } void bfs(int goal) { int queue[MAX]; int i,front,rear,root; front=rear=0; for (i=1;i<=MAX;i++) visited[i]=0; visited[goal]=1; queue[rear++]=goal; while(front!=rear) { root=queue[front]; for(i=1;i<=MAX;i++) { if (adj[root][i] && !visited[i]) { visited[i]=1; queue[rear++]=i; printf("%d",i); } front++; } } }

    D Offline
    D Offline
    DeepakMega
    wrote on last edited by
    #2

    Is the queue circular , if so you need to check for ends and rotate the queue's front/rear back to 0. Refer here Circular Queue[^]

    Z 1 Reply Last reply
    0
    • D DeepakMega

      Is the queue circular , if so you need to check for ends and rotate the queue's front/rear back to 0. Refer here Circular Queue[^]

      Z Offline
      Z Offline
      zeego
      wrote on last edited by
      #3

      No, it is not circular. It is just a FIFO queue.

      1 Reply Last reply
      0
      • Z zeego

        Hi I made the following program for depth first search but I am having wrong path. Can anyone catch or tell me what I am doing wrong here. I dont know much how to use the debugger in turbo c professional. Thanks and regards, Mike. #include <stdio.h> #include <conio.h> #define MAX 6 // Node/Vertex count int adj[MAX][MAX]={ // Adjacency Matrix 2x2 {0,1,1,1,0,0}, {1,0,0,0,1,1}, {1,0,0,0,0,0}, {1,0,0,0,0,0}, {0,1,0,0,0,0}, {0,1,1,0,0,0} }; int visited[MAX]; // Visited array void bfs(int goal); // bfs function int main () { int g=5; //set Goal node clrscr(); printf("The nodes order is "); bfs(g); return 0; } void bfs(int goal) { int queue[MAX]; int i,front,rear,root; front=rear=0; for (i=1;i<=MAX;i++) visited[i]=0; visited[goal]=1; queue[rear++]=goal; while(front!=rear) { root=queue[front]; for(i=1;i<=MAX;i++) { if (adj[root][i] && !visited[i]) { visited[i]=1; queue[rear++]=i; printf("%d",i); } front++; } } }

        S Offline
        S Offline
        Saurabh Garg
        wrote on last edited by
        #4

        For loops be for(i=0 ; i `front++;` should be outside the for loop. -Saurabh

        Z 1 Reply Last reply
        0
        • S Saurabh Garg

          For loops be for(i=0 ; i `front++;` should be outside the for loop. -Saurabh

          Z Offline
          Z Offline
          zeego
          wrote on last edited by
          #5

          Output is wrong if I take it out of the for loop :((

          1 Reply Last reply
          0
          • Z zeego

            Hi I made the following program for depth first search but I am having wrong path. Can anyone catch or tell me what I am doing wrong here. I dont know much how to use the debugger in turbo c professional. Thanks and regards, Mike. #include <stdio.h> #include <conio.h> #define MAX 6 // Node/Vertex count int adj[MAX][MAX]={ // Adjacency Matrix 2x2 {0,1,1,1,0,0}, {1,0,0,0,1,1}, {1,0,0,0,0,0}, {1,0,0,0,0,0}, {0,1,0,0,0,0}, {0,1,1,0,0,0} }; int visited[MAX]; // Visited array void bfs(int goal); // bfs function int main () { int g=5; //set Goal node clrscr(); printf("The nodes order is "); bfs(g); return 0; } void bfs(int goal) { int queue[MAX]; int i,front,rear,root; front=rear=0; for (i=1;i<=MAX;i++) visited[i]=0; visited[goal]=1; queue[rear++]=goal; while(front!=rear) { root=queue[front]; for(i=1;i<=MAX;i++) { if (adj[root][i] && !visited[i]) { visited[i]=1; queue[rear++]=i; printf("%d",i); } front++; } } }

            D Offline
            D Offline
            DeepakMega
            wrote on last edited by
            #6

            Sry im not good at algorithms, when i ran your code in vs there was an error in the 3rd line of the code below

            root=queue[front];
            for(i=1;i<=MAX;i++)
            {
            if (adj[root][i] && !visited[i])

            ie : adj[root][i] , the root value was garbage, and root=queue[front]; here front was 6 and queue[6] was uninitialized

            Z 2 Replies Last reply
            0
            • D DeepakMega

              Sry im not good at algorithms, when i ran your code in vs there was an error in the 3rd line of the code below

              root=queue[front];
              for(i=1;i<=MAX;i++)
              {
              if (adj[root][i] && !visited[i])

              ie : adj[root][i] , the root value was garbage, and root=queue[front]; here front was 6 and queue[6] was uninitialized

              Z Offline
              Z Offline
              zeego
              wrote on last edited by
              #7

              thanks for the reply. I am using the turbo c 3.0 IDE, I never knew it could run in visual studio. :^) I had a hard time debugging this inside the turbo c ide so I posted it here. Mike.

              1 Reply Last reply
              0
              • D DeepakMega

                Sry im not good at algorithms, when i ran your code in vs there was an error in the 3rd line of the code below

                root=queue[front];
                for(i=1;i<=MAX;i++)
                {
                if (adj[root][i] && !visited[i])

                ie : adj[root][i] , the root value was garbage, and root=queue[front]; here front was 6 and queue[6] was uninitialized

                Z Offline
                Z Offline
                zeego
                wrote on last edited by
                #8

                Cant get it to work. The output is a blank screen :(

                #include <stdio.h>
                #include <conio.h>
                #define MAX 6 // Node/Vertex count
                int adj[MAX][MAX]={ // Adjacency Matrix 2x2
                {0,1,1,1,0,0},
                {1,0,0,0,1,1},
                {1,0,0,0,0,0},
                {1,0,0,0,0,0},
                {0,1,0,0,0,0},
                {0,1,1,0,0,0}
                };

                int visited[MAX]; // Visited array
                void bfs(int goal); // bfs function

                int main ()
                {
                int s=3; //set Source node
                clrscr();
                printf("The nodes order is ");
                bfs(s);
                return 0;

                }
                

                void bfs(int source)
                {
                int queue[MAX];
                int i,front,rear,root;
                front=rear=0;

                   for (i=1;i<MAX;i++)
                   {
                	   visited\[i\]=0;
                   }
                
                
                
                   queue\[++rear\]=source;
                   visited\[source\]=1;
                
                   printf("%d :",source);
                
                	while(rear!=front)
                		{
                			root=queue\[++front\];
                			for(i=0;i<MAX;i++)
                
                				if (adj\[root\]\[i\] && !visited\[i\])
                				{
                					queue\[rear++\]=i;
                					visited\[i\]=1;
                					printf("%d",i);
                				}
                
                
                			front++;
                		}
                
                
                   }
                
                D 2 Replies Last reply
                0
                • Z zeego

                  Cant get it to work. The output is a blank screen :(

                  #include <stdio.h>
                  #include <conio.h>
                  #define MAX 6 // Node/Vertex count
                  int adj[MAX][MAX]={ // Adjacency Matrix 2x2
                  {0,1,1,1,0,0},
                  {1,0,0,0,1,1},
                  {1,0,0,0,0,0},
                  {1,0,0,0,0,0},
                  {0,1,0,0,0,0},
                  {0,1,1,0,0,0}
                  };

                  int visited[MAX]; // Visited array
                  void bfs(int goal); // bfs function

                  int main ()
                  {
                  int s=3; //set Source node
                  clrscr();
                  printf("The nodes order is ");
                  bfs(s);
                  return 0;

                  }
                  

                  void bfs(int source)
                  {
                  int queue[MAX];
                  int i,front,rear,root;
                  front=rear=0;

                     for (i=1;i<MAX;i++)
                     {
                  	   visited\[i\]=0;
                     }
                  
                  
                  
                     queue\[++rear\]=source;
                     visited\[source\]=1;
                  
                     printf("%d :",source);
                  
                  	while(rear!=front)
                  		{
                  			root=queue\[++front\];
                  			for(i=0;i<MAX;i++)
                  
                  				if (adj\[root\]\[i\] && !visited\[i\])
                  				{
                  					queue\[rear++\]=i;
                  					visited\[i\]=1;
                  					printf("%d",i);
                  				}
                  
                  
                  			front++;
                  		}
                  
                  
                     }
                  
                  D Offline
                  D Offline
                  DeepakMega
                  wrote on last edited by
                  #9

                  What is your required output. Please specify the output needed for the above program inputs.

                  Z 1 Reply Last reply
                  0
                  • Z zeego

                    Cant get it to work. The output is a blank screen :(

                    #include <stdio.h>
                    #include <conio.h>
                    #define MAX 6 // Node/Vertex count
                    int adj[MAX][MAX]={ // Adjacency Matrix 2x2
                    {0,1,1,1,0,0},
                    {1,0,0,0,1,1},
                    {1,0,0,0,0,0},
                    {1,0,0,0,0,0},
                    {0,1,0,0,0,0},
                    {0,1,1,0,0,0}
                    };

                    int visited[MAX]; // Visited array
                    void bfs(int goal); // bfs function

                    int main ()
                    {
                    int s=3; //set Source node
                    clrscr();
                    printf("The nodes order is ");
                    bfs(s);
                    return 0;

                    }
                    

                    void bfs(int source)
                    {
                    int queue[MAX];
                    int i,front,rear,root;
                    front=rear=0;

                       for (i=1;i<MAX;i++)
                       {
                    	   visited\[i\]=0;
                       }
                    
                    
                    
                       queue\[++rear\]=source;
                       visited\[source\]=1;
                    
                       printf("%d :",source);
                    
                    	while(rear!=front)
                    		{
                    			root=queue\[++front\];
                    			for(i=0;i<MAX;i++)
                    
                    				if (adj\[root\]\[i\] && !visited\[i\])
                    				{
                    					queue\[rear++\]=i;
                    					visited\[i\]=1;
                    					printf("%d",i);
                    				}
                    
                    
                    			front++;
                    		}
                    
                    
                       }
                    
                    D Offline
                    D Offline
                    DeepakMega
                    wrote on last edited by
                    #10

                    Changes made : for (i=0;i<MAX;i++) { visited[i]=0; } queue[rear++]=source; // its not ++rear as it becomes queue[1] instead of queue[0] ..... ..... while(rear!=front) { root=queue[front]; //no need to increment front here This is the output i got The nodes order is 3 :01245

                    Z 2 Replies Last reply
                    0
                    • D DeepakMega

                      Changes made : for (i=0;i<MAX;i++) { visited[i]=0; } queue[rear++]=source; // its not ++rear as it becomes queue[1] instead of queue[0] ..... ..... while(rear!=front) { root=queue[front]; //no need to increment front here This is the output i got The nodes order is 3 :01245

                      Z Offline
                      Z Offline
                      zeego
                      wrote on last edited by
                      #11

                      The program is for breadth first traversal of a graph. The output is there but program is crashing. I have to use break to stop from infinite looping.:confused:

                      D 1 Reply Last reply
                      0
                      • D DeepakMega

                        What is your required output. Please specify the output needed for the above program inputs.

                        Z Offline
                        Z Offline
                        zeego
                        wrote on last edited by
                        #12

                        Hello mate, thanks for the reply. I need breadth first traversal on a graph, but its not working properly.:~ The program hangs inside my turbo c ide and I have to use 'break' to get out of the infinite loop. Also I dont know how to debug inside turbo c 3 IDE so having a hard time debugging the problem in my code.Please help me. :^) Thanks and best regards, Mike.

                        1 Reply Last reply
                        0
                        • D DeepakMega

                          Changes made : for (i=0;i<MAX;i++) { visited[i]=0; } queue[rear++]=source; // its not ++rear as it becomes queue[1] instead of queue[0] ..... ..... while(rear!=front) { root=queue[front]; //no need to increment front here This is the output i got The nodes order is 3 :01245

                          Z Offline
                          Z Offline
                          zeego
                          wrote on last edited by
                          #13

                          Thanks for the reply mate. Isn't ++rear=rear+1 ? What is the difference between the two ? Also queue[rear++]=source means queue[0]=source ? Best regards, Mike.

                          1 Reply Last reply
                          0
                          • Z zeego

                            The program is for breadth first traversal of a graph. The output is there but program is crashing. I have to use break to stop from infinite looping.:confused:

                            D Offline
                            D Offline
                            DeepakMega
                            wrote on last edited by
                            #14

                            rear=0; 1) queue[rear++]=source; // is same as queue[0]=source; and rear increments after assignment; 2) queue[++rear]=source; // is same as queue[1]=source; here rear increments before assignment; Its from the precedence of operators in c, check operator precedence table[^] The below program with minor changes as specified above runs fine in my turbo c , just add a getch() in main

                            #include <stdio.h>
                            #include <conio.h>
                            #define MAX 6 // Node/Vertex count
                            int adj[MAX][MAX]={ // Adjacency Matrix 2x2
                            {0,1,1,1,0,0},
                            {1,0,0,0,1,1},
                            {1,0,0,0,0,0},
                            {1,0,0,0,0,0},
                            {0,1,0,0,0,0},
                            {0,1,1,0,0,0}
                            };

                            int visited[MAX]; // Visited array
                            void bfs(int goal); // bfs function

                            int main ()
                            {
                            int s=3; //set Source node
                            clrscr();
                            printf("The nodes order is ");
                            bfs(s);
                            getch();
                            return 0;

                            }
                            

                            void bfs(int source)
                            {
                            int queue[MAX];
                            int i,front,rear,root;
                            front=rear=0;

                               for (i=0;i<MAX;i++)
                               {
                            	   visited\[i\]=0;
                               }
                            
                            
                            
                               queue\[rear++\]=source;
                               visited\[source\]=1;
                            
                               printf("%d :",source);
                            
                            	while(rear!=front)
                            		{
                            			root=queue\[front\];
                            			for(i=0;i<MAX;i++)
                            
                            				if (adj\[root\]\[i\] && !visited\[i\])
                            				{
                            					queue\[rear++\]=i;
                            					visited\[i\]=1;
                            					printf("%d",i);
                            				}
                            
                            
                            			front++;
                            		}
                            
                            
                               }
                            
                            Z 1 Reply Last reply
                            0
                            • D DeepakMega

                              rear=0; 1) queue[rear++]=source; // is same as queue[0]=source; and rear increments after assignment; 2) queue[++rear]=source; // is same as queue[1]=source; here rear increments before assignment; Its from the precedence of operators in c, check operator precedence table[^] The below program with minor changes as specified above runs fine in my turbo c , just add a getch() in main

                              #include <stdio.h>
                              #include <conio.h>
                              #define MAX 6 // Node/Vertex count
                              int adj[MAX][MAX]={ // Adjacency Matrix 2x2
                              {0,1,1,1,0,0},
                              {1,0,0,0,1,1},
                              {1,0,0,0,0,0},
                              {1,0,0,0,0,0},
                              {0,1,0,0,0,0},
                              {0,1,1,0,0,0}
                              };

                              int visited[MAX]; // Visited array
                              void bfs(int goal); // bfs function

                              int main ()
                              {
                              int s=3; //set Source node
                              clrscr();
                              printf("The nodes order is ");
                              bfs(s);
                              getch();
                              return 0;

                              }
                              

                              void bfs(int source)
                              {
                              int queue[MAX];
                              int i,front,rear,root;
                              front=rear=0;

                                 for (i=0;i<MAX;i++)
                                 {
                              	   visited\[i\]=0;
                                 }
                              
                              
                              
                                 queue\[rear++\]=source;
                                 visited\[source\]=1;
                              
                                 printf("%d :",source);
                              
                              	while(rear!=front)
                              		{
                              			root=queue\[front\];
                              			for(i=0;i<MAX;i++)
                              
                              				if (adj\[root\]\[i\] && !visited\[i\])
                              				{
                              					queue\[rear++\]=i;
                              					visited\[i\]=1;
                              					printf("%d",i);
                              				}
                              
                              
                              			front++;
                              		}
                              
                              
                                 }
                              
                              Z Offline
                              Z Offline
                              zeego
                              wrote on last edited by
                              #15

                              Thanks so much for the reply and the link, the program is working fine now. :-D Best Regards, Mike.

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups