[C]Cykl eulera i lista incydencji

0

Witam,
mam duuzy problem z wyszukaniem cyklu eulera przy pomocy listy incydencji, z nie wiadomych powodow program sie wywala modyfikowalem go "rozniscie" i niestety ciagle problemy :/

najpierw deklaracja struktur i zmiennych:

struct plista;
typedef struct plista lista;

struct plista
{
 lista *nast;
 int krawedz;
};

lista *first,*nowy,*wsk,*temp,**lista_i;

int *stos;
int *cykl;
int top_cykl=0;
int top_stos=0;

program glowny:

int main(int argc, char *argv[])
{
  int x;
 
  printf("Podaj liczbe wierzcholkow: \n");
  scanf("%d",&x);
  
  printf("Tworzenie grafu z cyklem Eulera...\n");
  generuj_graf(x);
  printf("\nGraf stworzony i zapisany do pliku plik.txt.\n");
  tworz_macierz_s();
  tworz_liste_i();

  printf("\nCykl Euler'a:\n");
  
  stos = calloc( (int)(lw*(lw-1))/2,sizeof(int) );
  cykl = calloc( (int)(lw*(lw-1))/2,sizeof(int) );


  cykl_eulera_lista();
    
  while(top_cykl)
  {
   if(top_cykl!=1)
    printf("%d -> ",cykl[--top_cykl]);
   else
    printf("%d",cykl[--top_cykl]);
  }

  free(stos);
  stos=NULL;
  free(cykl);
  cykl=NULL;
  
  printf("\n"); 
  system("PAUSE");	
  return 0;
}

funkcje tworzaca liste incydencji:

void tworz_liste_i()
{
 FILE *plik;
 int i,j,n,k;
 int wartosc;
 int flaga=0;
 plik=fopen("plik.txt","r");
 
 printf("Tworzenie listy incydencji z plik.txt\n");
 
 fscanf(plik,"%d",&n);
 //printf("Liczba wierzcholkow z pliku %d\n",n);
 lw=n;
 //alokacja w pamieci macierzy sasiedztwa

 lista_i=calloc(n,sizeof(lista *));

 for(i=0;i<n;i++)
 {
  lista_i[i]=malloc(sizeof(lista*));


 }
  

 for(i=0; i<n; i++)
 {
  for(j=0; j<n; j++)
  {
   fscanf(plik,"%d",&k);
   if(k==1)
   {
    if(flaga==0)
    {
     lista_i[i]->krawedz=j;
     lista_i[i]->nast=NULL;
     flaga=1;
    }
    else 
     create(j,lista_i[i]);
   }  
  }
  flaga=0;
}
 fclose(plik);
    



//WYPISANIE LISTY INCYDENCJI NA EKRAN
 
 for(i=0; i<n; i++)
 {
  printf("[%d] -> ",i);
  wsk=lista_i[i]; 
  while(wsk->nast != NULL)
   { 
    printf("%d -> ",wsk->krawedz);
    wsk=wsk->nast;
   } 
  printf("%d -> ",wsk->krawedz); 
  printf("NULL\n");
 }


}



void create(int value,lista *wsk)
{
 lista *newelement;
 newelement = malloc(sizeof(lista));
 newelement->krawedz = value;
 while(wsk->nast!= NULL)
 {
  wsk = wsk->nast;
 }
 newelement->nast = NULL;
 wsk->nast = newelement;
}

funckja szukajaca cyklu eulera

void cykl_eulera_lista()
{
 int v;
 int i;
 int start=0;

do
{

  wsk=lista_i[start];
  if(wsk==NULL)
       {
        printf("aaaaaa");
        cykl[top_cykl++]=stos[--top_stos];
        start=stos[top_stos-1];
       } 
  else 
    {
       v=wsk->krawedz;
       del(start,lista_i[v],v);
       del(v,lista_i[start],start);
       stos[top_stos++]=v;
       start=v;
    }
        
    
}
while(top_stos);

}

Dodam, ze program wczytuje poprawny graf eulerowski z pliku tak wiec tam nie ma bledu.

Pozdrawiam !!!
Licze na Wasza pomoc :D

P.S.
mam problemy z zalogowaniem oraz z przypomnieniem hasla :(

0

do funckji szukajacej cyklu eulera wkradl sie blad:

void cykl_eulera_lista(int i)
{
 int v;
 int i;
 int start=0;


do
{

  wsk=lista_i[start];
  if(wsk==NULL) //tu if(wsk==NULL), wczesniej jakies krzaki sie pojawily, po edycji rowniez sie pojawiaja
       {
        printf("aaaaaa");
        cykl[top_cykl++]=stos[--top_stos];
        start=stos[top_stos-1];
       } 
  else 
    {
       v=wsk->krawedz;
       del(start,lista_i[v],v);
       del(v,lista_i[start],start);
       stos[top_stos++]=v;
       start=v;
    }
        
    
}
while(top_stos);

}

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