It is also given that in case of a tie, a smaller indexed vertex should be preferable to a larger indexed vertex.
First in my approach i traversed graph using bfs finding distances of all vertices from start node ,i got the path length from start to end node,then i traversed from end node to start node by viewing if the length of node is one less than previous,but i am missing some point in between when i submit my code it is not correct for all test cases,please can someone find what is my mistake.
First in my approach i traversed graph using bfs finding distances of all vertices from start node ,i got the path length from start to end node,then i traversed from end node to start node by viewing if the length of node is one less than previous,but i am missing some point in between when i submit my code it is not correct for all test cases,please can someone find what is my mistake.
Code:
#include <stdio.h> #include <stdlib.h> int count=0; struct node{ int value; struct node *next; struct node *prev; }; struct node *root=NULL,*tra=NULL; void bfs(int n,int a[][n],int start,int end,int value[]){ for(int i=0;i<n ;i++){ if(i==start) continue; if(a[start][i] == 1 ){ if(value[i] == 0 || value[i] > value[start] + 1 ){ value[i] = value[start] + 1; struct node *p; p = (struct node *)malloc(sizeof(struct node)); p->value = i; p->next = root; p->prev = NULL; root->prev = p; root = p; } } } return; } int main() { int t; scanf("%d",&t); for(int i=0;i<t;i++){ int n; scanf("%d",&n); int a[n][n],start,end,value[n]; struct node *temp; for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ scanf("%d",&a[j][k]); } } memset(value,0,n*4); scanf("%d %d",&start,&end); value[start]=1; temp = (struct node *)malloc(sizeof(struct node)); temp->value = start; temp->next = NULL; temp->prev = NULL; root = temp; tra = temp; while(tra != NULL){ bfs(n,a,tra->value,end,value); tra = tra->prev; } printf("%d\n",value[end]-1); int x = end; int p[n],pi=0; p[pi++] = x; while(1){ for(int j=0;j<n;j++){ if((value[j] == value[x]-1) &&(a[j][x] == 1)){ // printf("%d ",j); p[pi++] = j; x=j; break; } } if(x == start){ break; } } for(int j=pi-1;j>=0;j--){ printf("%d ",p[j]); } } return 0; }