Разработка алгоритма и программного обеспечения для решения прикладной задачи теории графов

Автор работы: Пользователь скрыл имя, 17 Февраля 2011 в 13:54, курсовая работа

Описание работы

Задание на курсовую работу по дисциплине «Дискретная математика».

Студент группы АСОиУзс-07-01 Быстров Евгений М.

Специальность «Автоматизированные системы обработки информации и управления»

Тема: Разработка алгоритма и программного обеспечения для решения прикладной задачи теории графов.

ЗАДАНИЕ 13. Построить гамильтонову цепь в графе, используя алгоритм с возвратом.

Содержание работы

1.Введение. Постановка задачи.
3
2.Назначение и область применения.
3
3.Описание алгоритма решения задачи.
3
4.Ручной просчёт.
4
5.Описание программы.
6
6.Тестирование программы.
7
7.Литература.
9
8.Приложение 1. Листинг программы.

Файлы: 1 файл

курсовая дискретная.doc

— 393.50 Кб (Скачать файл)

                           for (int x=0; x<v; x++) //стираем все вершины  до той,

                             {                     //с которой нужно вести поиск

                              if (x>=k-1)

                                {

                                 p[x]=-1;

                                }

                             }

                        k=k-2;

                       }

                        tempput="";

                        j=v-1;

                        i=v-1;

                       }

                    }

                 break;

               case 0:                     //если идет не ребро

                  if (j+1==v)              //если это последняя j-тая вершина,

                    {                      //а ребер больше нет, то

                     if (p[v-1]!=-1)       //проверяем  готова ли цепь

                       {                   //если последняя вершина пути не пуста

                        for (int x=0; x<v; x++)

                          {

                           put=put+IntToStr(p[x]);

                          }

                        Eput->Text=put;

                        return;

                       }

                     if (p[v-1]<0)         //если цепь не готова

                       {                   //записать ее в tempput

                        for (int x=0; x<v; x++)

                          {                //убрав -1

                           if (IntToStr(p[x])!=-1)

                             {

                              tempput=tempput+IntToStr(p[x]);

                             }

                          }

                        //сравнить это значение пути  с уже имеющимися в memo1

                        for (int str=0; str<memo1->Lines->Count; str++)

                          {

                           if (StrToInt(tempput)==StrToInt(memo1->Lines->Strings[str]))

                             {             //если найдено совпадение

                              t++;         //фиксируем  это счетчиком

                             }

                          }

                        if (t==0)          //если  счетчик не изменится

                          {

                           memo1->Lines->Append(tempput); //записать неполный путь в memo1

                          }

                        else if (t>0)      //если счетчик  изменится, т.е. совпадение есть

                          {

                           t=0;

                          }

                        temp=p[k-1];         //вернуться  на предыдущую вершину

                        if (temp<v-1)

                          {

                           temp++;

                           p[k-1]=-1;

                          }

                        else if (temp==v-1)   //контроль temp чтобы  не вышел за границы

                          {                   //возможного кол-ва вершин

                           temp=0;

                        for (int x=0; x<v; x++) //стираем все вершины до той,

                          {                     //с которой нужно вести поиск

                           if (x>=k-1)

                             {

                              p[x]=-1;

                             }

                          }

                       }

                        if (temp>v-1)

                          {

                           temp=0;

                           p[0]=0;

                          }

                        k=k-2;

                        tempput="";

                        j=v-1;

                        i=v-1;

                       }

                    }

                 break;

               }

          }

       }

    ; 

}

//--------------------------------------------------------------------------- 

void __fastcall TFA::BsavegrafClick(TObject *Sender)

{

  //создаём  динамический массив для таблицы  смежности графа

  int **g = new int *[v];  //массив указателей  на строки

  for (int i=0; i<v; i++)  //выделение памяти  под каждую строку

    g[i] = new int [v];

  //заполняем его из StringGrid1

  for (int i=0; i<v; i++)

    for (int j=0; j<v; j++)

      g[i][j]=StrToInt(StringGrid1->Cells[i+1][j+1]); 

  ofstream f(namegraf.c_str());

  f<<v<<endl;

  //заполняем  файл графом g

  for (int i=0; i<v; i++)

    for (int j=0; j<v; j++)

      f<<g[i][j]<<" ";

  f.close();               //закрываем файл

  FileListBox1->Update();

}

//--------------------------------------------------------------------------- 

void __fastcall TFA::BdelgrafClick(TObject *Sender)

{

  DeleteFileA(FileListBox1->FileName);

  FileListBox1->Update();

}

//--------------------------------------------------------------------------- 

void __fastcall TFA::N3Click(TObject *Sender)

{

ShowMessage("Курсовая  работа по дискретной математике. Выполнил студент гр. АСОиУзс-07-01 Быстров Евгений, вариант №13");

}

//---------------------------------------------------------------------------

Информация о работе Разработка алгоритма и программного обеспечения для решения прикладной задачи теории графов