Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 00:54   #1
Inka94
Новичок
Джуниор
 
Регистрация: 08.05.2012
Сообщений: 1
По умолчанию Перевод программы на java

Помогите перевести программу на java пожалуйста!!!

Код:
#include <iostream.h>
#define TRUE 1
#define FALSE 0
typedef int Boolean;
typedef struct Leader *Lref; // Тип: указатель на заголовочный узел.
typedef struct Trailer *Tref; // Тип: указатель на дуговой узел.

//Описание типа заголовочного узла.
typedef struct Leader 
{ 
  int Key;   //Имя заголовочного узла.
  int Count; //Количество предшественников.
  int WGN;   //Характеристика узла.
  Tref Trail;//Указатель на список смежности.
  Lref Next; //Указатель на следующий узел в списке заголовочных узлов.
};

//Описание типа дугового узла.
typedef struct Trailer 
{ 
  Lref Id; 
  Tref Next; 
};

class Spisok
{
  private:
    Lref Head; //Указатель на голову списка заголовочных узлов.
    Lref Tail; //Указатель на фиктивный элемент 
               // в конце списка заголовочных узлов.
    Lref Stack[30]; //Рабочий стек.
    void SearchGraph (int, Lref *);
    void Cycle (Lref, int *, int *);
  public:
    Spisok() {//Инициализация списка заголовочных узлов.
              Head = Tail =  new (Leader); }
    void MakeGraph ();
    void PrintGraph ();
    void Mn_Cycle();
};

void main ()
{
  Spisok A;

  //Построение графа и вывод его структуры Вирта.
  A.MakeGraph ();
  A.PrintGraph (); cout<<endl;
  //Построение множества фундаментальных циклов графа.
  A.Mn_Cycle();
}

void Spisok::Mn_Cycle()
//Построение множества фундаментальных циклов графа G.
{
  cout << "Фундаментальные циклы:\n ";
  int num = 0, d = 0; //Количество элементов в стеке.
  Stack[0] = NULL;
  Lref t = Head;
  while ( t!=Tail )
  {  t->WGN = 0; t = t->Next; }
  t = Head;
  while ( t!=Tail )
  {
     if ( t->WGN==0 ) Cycle(t,&d,&num);
     t = t->Next;
  }
}

void Spisok::Cycle (Lref r, int *d, int *num)
//Нахождение фундаментального множества циклов для
//компоненты связности, содержащей вершину r->Key.
{
  Tref t;
  int i;

  (*d)++; Stack[(*d)] = r;
  (*num)++; r->WGN = *num;
  t = r->Trail;
  while ( t != NULL )
  {
    if ( t->Id->WGN==0 ) Cycle (t->Id,d,num);
    else  
       if  (t->Id->Key != Stack[(*d)-1]->Key &&
            r->WGN > t->Id->WGN)
       {
          i = *d;
          while ( Stack[i]->Key != t->Id->Key )
          {
             cout << Stack[i]->Key << " ";
             i--;
          }
          cout << t->Id->Key << endl;
       }
    t = t->Next;
  }
  // Использованная вершина r->Key удаляется из стека.
  (*d)--;
}

void Spisok::SearchGraph (int w, Lref *h)
//Функция возвращает указатель на заголовочный узел 
//с ключом w в графе, заданном структурой Вирта с указателем Head. 
{
  *h = Head; (*Tail).Key = w;
  while ((**h).Key!=w) *h = (**h).Next;
  if (*h==Tail)
  //В списке заголовочных узлов нет узла с ключом w.
  //Поместим его в конец списка Head.
  { Tail = new (Leader); (**h).Count = 0; 
    (**h).Trail = NULL; (**h).Next = Tail; }
}

void Spisok::MakeGraph ()
//Функция возвращает указатель Head на структуру 
//Вирта, соответствующую ориентированному графу.
{
  int x,y;
  Lref p,q; //Рабочие указатели.
  Tref t,r; //Рабочие указатели.
  Boolean Res; //Флаг наличия дуги.
  cout<<"Вводите начальную вершину дуги: ";
  cin>>x;
  while (x!=0)
  {
     cout<<"Вводите конечную вершину дуги: "; cin>>y;
     //Определим, существует ли в графе дуга (x,y)?
     SearchGraph (x, &p); SearchGraph (y,&q);
     r = (*p).Trail; Res = FALSE; 
     while ((r!=NULL)&&(!Res)) 
       if ((*r).Id==q) Res = TRUE; 
       else r = (*r).Next; 
     if (!Res) //Если дуга отсутствует, то поместим её в граф.
      { t = new (Trailer); (*t).Id = q; 
        (*t).Next = (*p).Trail; (*p).Trail = t; (*q).Count++; } 
     cout<<"Вводите начальную вершину дуги: "; cin>>x;
  }
}

void Spisok::PrintGraph ()
//Вывод структуры Вирта, заданной указателем 
//Head и соответствующей ориентированному графу.
{
  Lref p; //Рабочий указатель.
  Tref q; //Рабочий указатель.

  p = Head;
  while (p!=Tail)
  {
     cout<<"("<<(*p).Key; q = (*p).Trail; 
     while (q!=NULL) 
      { cout<<(*(*q).Id).Key; q = (*q).Next; } 
     cout<<")"; p = (*p).Next; cout<<" ";
  }
}
Inka94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из С# на Java STERVA Помощь студентам 0 22.12.2011 18:28
перевод программы с Pascal на Java christa Помощь студентам 1 23.09.2011 19:53
Перевод на Java Ksuxa Общие вопросы по Java, Java SE, Kotlin 2 06.09.2010 01:01
Перевод программы с delphi на Java zlobagi Фриланс 1 15.05.2010 17:54
перевод с Java на C Lys Помощь студентам 2 10.12.2009 01:50