tags:

views:

51

answers:

1

can you guys tell me what is the wrong with this code? it is not working with

1 2
1 3
1 4
2 5
2 6
2 7
2 8
3 8
3 9
4 10

1 -> 4 -> 10 and stop

DFS function

void Is_Connected(graphType* g, int v){ //function to define the graph is connected or not  
 int i=0;  
 g_node* w;  
 top = NULL;  
 g -> visited[v] = TRUE;  
 push(v);  
 printf("%d", v);  
 while (top != NULL) {  
  w = g -> adjList[v];  
  while (w) {  
   if (!g -> visited[w -> vertex]) {  
    push(w -> vertex);  
    g -> visited[w -> vertex] = TRUE;  
    printf("->%d", w->vertex);  
    v = w -> vertex;  
    w = g -> adjList[v];  
   }  
   else {  
    w = w -> link;  
   }  
  }  
  i++;  
  v = pop();    
 }  

 if (i == (g -> x)-1){ //number of vertices = number of vertetices pass through  
  puts("\nIs_Connected() result : yes");  
 }  

 else{  
  puts("\nIs_Connected() result : no");  
 }  
}  
A: 
top = NULL;    ==> initialised to NULL
 g -> visited[v] = TRUE;   
 push(v);   
 printf("%d", v);   
 while (top != NULL) ===> top is NULL always ( previous assignment is NULL). 
                          Loop is not entered at all ! ?
aJ
I believe push(v); will change top, which should be a global variable
sza
if that is so then problem is elsewhere
aJ
The logic looks good to me. Probably the error may in the construction of the graph or somewhere else.
sza