Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графы на С - не работает, не пойму где не прав 
:(
    Опции темы
darkness
Дата 7.11.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



Делал направленные  графы на С:

Код

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<alloc.h>
#include<math.h>

#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;
TOP *now;
//fir=(TOP*)malloc(sizeof(TOP));
//fir->next=NULL;
void print_data ()    //pechat'
{
 TOP *uk1;
 SPISOK *uk2, uk3;
 while(fir->next!=NULL)
 {
   printf("   %d\n", fir->vr);
   uk2=fir->sub;
   while (uk2->list!=NULL)
   {
   printf("   %d\n", uk2->vr);
    uk2=uk2->list;
   }
 }

}

void add_top_vr (int l)
{
  TOP *uk1;
  uk1=(TOP*) malloc(sizeof(TOP));
  if (fir->next==NULL)
  {
   fir->next=uk1;
   uk1->next=NULL;
  }
  else
  {
  now->next=uk1;
  uk1->next=NULL;
  }
  uk1->vr=l;
  now=uk1;
  return;
}

void  add_sub_vr(int l, int p)     // l - numer verchini  p - znachenie   добавляет в список инциндетности
{
 TOP *uk1;
 SPISOK *uk2;
 while (fir->next!=NULL)            // obrabotka uslovia???
 {
  uk1=fir->next;
  fir=uk1;
  if (fir->vr==l) break;
 }
 uk2=(SPISOK*)malloc(sizeof(SPISOK));
 fir->sub=uk2;
 uk2->list=NULL;
 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,  7);
      add_sub_vr( 2,  8);
      print_data ();

      getch();
      system("PAUSE");
      return 0;
}



Бажная функуия как я понял - это  add_top_vr() .... но до коца не могу догнать...
HELP PLEASE!!!!  


P.S.:
Примерная струтура которая должна была получиться это:
 NULL[указ]->6[указ]->9[указ]->4[указ]->11[NULL]
                          |                              |
                         \|/                           \|/
          [список инц-ти]              [список инц-ти]
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
chaos
Дата 7.11.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



boost::graph тебе в помощь  smile 
PM WWW   Вверх
archimed7592
  Дата 8.11.2006, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(chaos @  7.11.2006,  16:22 Найти цитируемый пост)
boost::graph тебе в помощь   
Цитата(darkness @  7.11.2006,  13:49 Найти цитируемый пост)
Делал направленные  графы на С:
 smile  smile 
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;
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
darkness
Дата 9.11.2006, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



archimed7592, да действительно... на выспавшуюся голову посмотрел код - немного даже ужаснулся....
Вот мой готовый вариант....:

Код

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#include<alloc.h>
#include<math.h>

#define TOP struct top
#define SPISOK struct spisok


SPISOK
{
  int vr;
  SPISOK* list;
};

TOP
{
 int vr;
 SPISOK *sub;
 TOP *next;
};


TOP *fir, *balv;
TOP *now;
SPISOK *bal;
//fir=0;
//fir=(TOP*)malloc(sizeof(TOP));
//fir->next=NULL;
void print_data ()    //pechat'
{
 TOP *uk1;
 SPISOK *uk2, uk3;
 uk1=fir;
 while(uk1->next!=NULL)
 {
   printf("   %d  ", uk1->vr);
   uk2=uk1->sub;
   //uk1=
   uk1=uk1->next;

   while (uk2->list!=NULL)
   {
   printf("   \n%d ", uk2->vr);
    uk2=uk2->list;
   }
 }

}

void add_top_vr (int l)
{
  TOP *uk1; /**uk2*/
  uk1=(TOP*) malloc(sizeof(TOP));
  //uk2=(TOP*) malloc (sizeof(TOP));
  //uk2=fir;
  if (fir->vr==NULL)
  {
   /*fir->next=uk1;
   uk1->next=NULL;
   uk1->sub=NULL; */
   uk1=fir;
   uk1->vr=l;
   uk1->next=balv;           //!!!!!!!!!!!!!

  }
  else
  {
  now->next=uk1;
  uk1->next=balv;
  }
  uk1->vr=l;
  uk1->sub=bal;
  now=uk1;
}

void  add_sub_vr(int l, int p)     // l - numer verchini  p - znachenie
{
 TOP *uk1;
 SPISOK *uk2;
 uk1=fir;
 while (uk1->next!=NULL)            // obrabotka uslovia???
 {

  //fir=uk1;
  if (uk1->vr==l) {/*printf(" %d \n ", uk1->vr);*/break;}
  uk1=uk1->next;
 }

 uk2=(SPISOK*)malloc(sizeof(SPISOK));
 uk1->sub=uk2;
 uk2->list=bal;
 uk2->vr=p;

 /*fir->sub=uk2;
 uk2->list=bal;
 uk2->vr=p; */
}


int main()
{
      fir=(TOP*) malloc (sizeof(TOP));
      now=(TOP*) malloc (sizeof(TOP));
      balv= (TOP*) malloc (sizeof(TOP));
      bal=   (SPISOK*) malloc (sizeof(SPISOK));
      fir->vr=NULL;
      balv->vr=NULL;
      balv->next=NULL;
      bal->list=NULL;


      add_top_vr (4);
      add_top_vr (6);
      add_top_vr (17);
      add_top_vr (54);
      add_top_vr (3);
      //print_data ();
      getch();
      add_sub_vr( 4,  7);
      add_sub_vr( 6,  8);
      print_data ();

      getch();
      system("PAUSE");
      return 0;
}




Сейчас вроде всё работает.... Только с печатью пока не совсем разобрался.... Но это тоже в процессе...
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.