Przeszukiwanie grafu w c, program

0

Cześć, mam do zrobienia pewien program z tworzeniem i przeszukiwaniem grafu jako list sąsiedztwa. Wyszło mi na razie takie coś, byłbym wdzięczny jeśli ktoś pomógłby mi z błędami. Nie ma błędów przy kompilacji, tylko program nie działa jak powinien i się wyłącza.

 
typedef struct nodeTAG{
	int data;
	struct nodeTAG *next;
}nodeT;

typedef struct listTAG{
	nodeT *front;
	nodeT *end;
}listT;

void listinit(listT *plist){
  plist->front = NULL;
  plist->end = NULL;
}

int isempty(listT *plist){
  if(plist->front = NULL)
    return 1;
  else return 0;
}

void addfront(listT *plist, int *x){
  nodeT *temp;
  temp = (nodeT*)malloc(sizeof(nodeT));
  temp->data = x;
  if(plist->front == NULL){
    temp->next = NULL;
    plist->front = temp;
    plist->end = temp;
  }else{
    temp->next = plist->front;
    plist->front = temp;
  }
}

void addend (listT *plist, int x){
  nodeT *temp;
  temp = (nodeT*)malloc(sizeof(nodeT));
  temp->data = x;
  if(plist->front == NULL){
    temp->next = NULL;
    plist->front = temp;
    plist->end = temp;
  }else{
    temp->next = NULL;
    plist->end->next=temp;
    plist->end = temp;
  }
}

void removefront(listT *plist, int *x){
  if(isempty(plist)==0){
    nodeT *temp;
    *x = plist->front->data;
    temp = plist->front;
    plist->front = temp->next;
    free(temp);
  }
}

void displist(listT *plist){
  nodeT *temp;
  if(isempty(plist)==0){
    temp = plist->front;
    printf("zawartosc listy: ");
    printf("%d", temp->data);
    while(temp->next !=NULL){
      temp = temp->next;
      printf("%d", temp->data);
    }
    printf(" \n ");
  }else
    printf("lista pusta");
}

void destroylist(listT *plist){
  nodeT *temp;
  while(plist->front != plist->end){
    temp = plist->front;
    plist->front = temp->next;
    free(temp);
  }
  if(plist->front != NULL){
    temp = plist->front;
    plist->front = NULL;
    plist->end = NULL;
    free(temp);
  }
}
int *tabzaznaczen;
listT *tabwierz;


void DFS(int wierz){
    listT *Stos;
    nodeT *p;
    listinit(Stos);
    addfront(Stos, &wierz);
    tabzaznaczen[wierz] = 1;
    while(Stos){
        removefront(Stos, &wierz);
        printf("%d\n", wierz);
        for(p = (tabwierz[wierz]).front; p; p = p->next){
            if(!tabzaznaczen[p->data]){
                addfront(Stos, &(p->data));
                tabzaznaczen[p->data] = 1;
            }
        }

    }
    }

int main(){
    int lwierzcholkow; //liczba wierzcholkow
    int lkrawedzi; //liczba krawedzi
    printf("Ile jest wierzcholkow?\n");
    scanf("%d", &lwierzcholkow);  //pyta i wczytuje z klawiatury ile wierzcholkow
    printf("Ile jest krawedzi?\n");
    scanf("%d", &lkrawedzi);  //pyta i wczytuje z klawiatury ile krawedzi
    tabzaznaczen = (int*) malloc(lwierzcholkow * sizeof(*tabzaznaczen));
    tabwierz = (listT*) malloc(lwierzcholkow * sizeof(*tabwierz));  //alokuje tablice dynamiczna o dlugosci = ilosci wierzcholkow
    for(int k=0;k<lwierzcholkow;k++){
        tabzaznaczen[k]=0;
        listinit(&tabwierz[k]);  //inicjalizuje listy sasiedzkie oraz ustawiam tablicę zaznaczeń na 0
    }

    printf("Dostepne wierzcholki to:\n");
    for(int j=0;j<lwierzcholkow;j++){
            printf("%d \n", j);}      //wyswietlam wiercholki ktore moze wykorzystac uzytkownik do tworzenia grafu
    for(int i=1;i<lkrawedzi+1;i++){
        int wierz1;
        int wierz2;

        printf("Z czym laczy sie krawedz %d ? Napisz po spacji\n", i);
        scanf("%d %d", &wierz1, &wierz2);                                 //wczytuje z klawiatury z czym ma sie laczyc dana krawedz
        if(wierz1>lwierzcholkow-1 || wierz2>lwierzcholkow-1){
            printf("Bledne wierzcholki");
            return 0;
        }
        else {
            addend(&tabwierz[wierz1], wierz2);
            addend(&tabwierz[wierz2], wierz1);             //konstruje graf dodajac odpowiednie wiercholki na koniec list
            }
    }
    int ktory;
    int start;
    printf("Dla DFS wcisnij '1' a dla BFS wcisnij '2' ");
    scanf("%d", &ktory);
    printf("Z ktorego wierzcholka zaczac?");
    scanf("%d", start);
    if(ktory=1 && start<lwierzcholkow){
        DFS(start);}
    else{
        printf("Bledne dane");
        return 0;
    }

      return 0;
    }
0

Co to znaczy

program nie działa jak powinien

A w ogóle to polecam na samym początku przepuścić ten kod przez http://format.krzaq.cc/

0

Program nie działa jak powinien czyli po dojściu do odpalania DFS wyskakuje, że program przestał działać

1 użytkowników online, w tym zalogowanych: 0, gości: 1