Автор работы: Пользователь скрыл имя, 17 Февраля 2011 в 13:54, курсовая работа
Задание на курсовую работу по дисциплине «Дискретная математика».
Студент группы АСОиУзс-07-01 Быстров Евгений М.
Специальность «Автоматизированные системы обработки информации и управления»
Тема: Разработка алгоритма и программного обеспечения для решения прикладной задачи теории графов.
ЗАДАНИЕ 13. Построить гамильтонову цепь в графе, используя алгоритм с возвратом.
1.Введение. Постановка задачи.
3
2.Назначение и область применения.
3
3.Описание алгоритма решения задачи.
3
4.Ручной просчёт.
4
5.Описание программы.
6
6.Тестирование программы.
7
7.Литература.
9
8.Приложение 1. Листинг программы.
for (int x=0; x<v; x++) //стираем все вершины до той,
{ //с которой нужно вести поиск
if (x>=k-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(
{ //если найдено совпадение
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->
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->
FileListBox1->Update();
}
//----------------------------
void __fastcall TFA::N3Click(TObject *Sender)
{
ShowMessage("Курсовая работа по дискретной математике. Выполнил студент гр. АСОиУзс-07-01 Быстров Евгений, вариант №13");
}
//----------------------------