Witam mam przeanalizować kod. Wiedziec co i jak sie gdzie dzieje. Chciałbym aby ktoś powiedział co robią pętle. Jest to przeszukiwanie grafu w głąb i wypisanie czy istnieje droga miedzy wierzchołkami podanymi z pliku. Chciałbym wiedzieć po co i dlaczego są tam te 4x pętle while
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct wierzcholek {
int *w;
bool odw;
int n;
int zeg;
int numer;
};
void szukaj_wglab (struct wierzcholek *G, struct wierzcholek v, int *clock, int T[]){
*clock++;
while ((T[v.numer-1])<v.n){
if (G[v.w[T[v.numer-1]]-1].odw==false){
G[v.w[T[v.numer-1]]-1].odw=true;
G[v.w[T[v.numer-1]]-1].zeg=*clock;
szukaj_wglab(G,G[v.w[T[v.numer-1]]-1],clock, T);
}
T[v.numer-1]++;
}
}
int main()
{
FILE *f=fopen("plik.txt","r");
int N, i=0, vp1, vp2, vk1, vk2, clock=0;
fscanf(f,"%d", &N);
struct wierzcholek G[N];
int T[N];
while (i<N){
G[i].odw=false;
G[i].zeg=0;
T[i]=0;
fscanf(f,"%d",&(G[i].numer));
fscanf(f,"%d",&(G[i].n));
if (G[i].n!=0) G[i].w=malloc(G[i].n*sizeof(int));
int j=0;
while (j<G[i].n){
fscanf(f,"%d",&(G[i].w[j]));
j++;
}
i++;
}
fscanf(f,"%d", &vp1);
fscanf(f,"%d", &vp2);
fscanf(f,"%d", &vk1);
fscanf(f,"%d", &vk2);
G[vp1-1].odw=true;
szukaj_wglab(G, G[vp1-1], &clock, T);
int log=0;
if (G[vp2-1].odw==true && G[vk1-1].odw==true && G[vk2-1].odw==true){
int k=0;
while (k<G[vk1-1].n && log==0){
if (G[vk1-1].w[k]==vk2) {
log=1;}
else k++;
}
k=0;
while (k<G[vk2-1].n && log==0){
if (G[vk2-1].w[k]==vk1) {
log=1;}
else k++;
}
if (log==0) printf("nie ma drogi");
while (k<G[vp1-1].n && log==1){
if (G[vp1-1].w[k]==vp2) {
log=2;}
else k++;
}
k=0;
while (k<G[vp2-1].n && log==1){
if (G[vp2-1].w[k]==vp1) {
log=2;}
else k++;
}
if (log==2) printf("jest droga");
else printf ("nie ma drogi");}
else printf("nie ma drogi");
return 0;
}