Цитата(chaos @ 7.11.2006, 16:22 ) | | boost::graph тебе в помощь |
Цитата(darkness @ 7.11.2006, 13:49 ) | | Делал направленные графы на С: |
darkness, твои основные ошибки: не инициализировал ни fir, ни now, ни указатели в самих вершинах. использовал глобальные переменные (fir) как "итераторы", неоднократно пытался проверить fir->next заведомо не зная является ли fir валидным указателем.| Код | #include <stdio.h> //#include <conio.h> // в Си нет такого хедера #include <string.h> #include <dos.h> //#include <alloc.h> // такого тоже нету, malloc объявлен в stdlib.h #include <math.h> #include <stdlib.h> // added #include <assert.h> // added
#define TOP struct top #define SPISOK struct spisok
SPISOK //spisok inzedentnosti { int vr; SPISOK* list; };
TOP // verchina { int vr; SPISOK *sub; TOP *next; };
TOP *fir = NULL; // added ` = NULL` TOP *now = NULL; // added ` = NULL`;
//fir=(TOP*)malloc(sizeof(TOP)); //fir->next=NULL;
void print_data () //pechat' { TOP *uk1 = fir; // added ` = fir` SPISOK *uk2; // removed `, uk3` while(uk1 != NULL) { printf("%2d:", uk1->vr); uk2 = uk1->sub; // corrected if (uk1->sub == NULL) // added { printf (" empty\n"); // added uk1 = uk1->next; continue; // added }; while (uk2 != NULL) // corrected { printf(" %2d", uk2->vr); // corrected uk2 = uk2->list; }; printf ("\n"); // added uk1 = uk1->next; }; }
void add_top_vr (int l) { TOP *uk1; uk1=(TOP*) malloc(sizeof(TOP)); uk1->next = NULL; // moved uk1->sub = NULL; // added if (fir == NULL) // corrected fir = uk1; // corrected else now = now->next = uk1; // corrected uk1->vr = l; now = uk1;
return; }
void add_sub_vr(int l, int p) // l - numer verchini p - znachenie добавляет в список инциндетности { TOP *uk1 = fir; // added ` = fir` SPISOK *uk2; while (uk1 != NULL) // corrected // obrabotka uslovia??? ага, она самая, обработка условия LOL if (uk1->vr == l) // corrected break; else uk1 = uk1->next; // corrected assert (uk1->vr == l); // added uk2 = (SPISOK *) malloc (sizeof (SPISOK)); uk2->list = uk1->sub; // corrected uk1->sub = uk2; // added uk2->vr = p; }
int main() { add_top_vr (4); add_top_vr (6); add_top_vr (17); add_top_vr (54); add_top_vr (2);
add_sub_vr (2, 6); add_sub_vr (2, 4); add_sub_vr (4, 2); add_sub_vr (4, 6); add_sub_vr (4, 54); add_sub_vr (17, 54); add_sub_vr (54, 2); //add_sub_vr (10, 1); // try uncomment it.
print_data ();
// getch(); // в Си нету такой ф-ции system("PAUSE"); return 0; } |
|