Автор работы: Пользователь скрыл имя, 17 Ноября 2011 в 03:43, курсовая работа
Этот граф устроен следующим образом. Вершины его - знакомые юбиляра. Две вершины смежны, если соответствующие знакомые друг другу не симпатизируют. Нетрудно понять, что число независимости этого графа и представляет тот самый максимальный контингент приглашенных, который может себе позволить юбиляр.
Таким образом, задача поиска наибольшего независимого множества заключается в нахождении наибольшего количества несмежных между собой вершин графа. Данная программа предлагает 3 алгоритма решения этой задачи.
Введение 4
1.Математические методы 6
2.Постановка задачи 11
3.Разработка алгоритмов 12
3.1. Алгоритм Брона-Кэрбоша 12
3.2. Алгоритм Ткача 13
3.3. Алгоритм поиска η-областей 14
4.Описание программы 17
Выводы 19
Список использованных источников 20
Приложение А: Экранные формы 21
Приложение Б: код 22
}
//----------------------------
void __fastcall TForm1::BDoneClick(TObject *Sender)
{
IMG->Brush->Color = clBlack;
IMG->Ellipse(Points[icurr].x-
fBuild = false;
BRed->Enabled = true;
BRest->Enabled = false;
BTkach->Enabled = true;
BBron->Enabled = true;
BEta->Enabled = true;
BDone->Enabled = false;
for (int i=0; i<QPnt; i++)
for (int j=0; j<QPnt; j++)
AdjMatr[i][j] = 0;
for (int i = 0; i<QEdg; i++)
{
AdjMatr[Edges[i].p1.inc][
AdjMatr[Edges[i].p2.inc][
}
Tkach();
}
//----------------------------
void __fastcall
TForm1::Image1MouseDown(
TMouseButton Button, TShiftState Shift, int X, int Y)
{
float d = sqrt((X-Points[icurr].x)*(X-
if (Select1 && (d<=R))
{
fMove = true;
Select1 = false;
xm = Points[icurr].x;
ym = Points[icurr].y;
IMG->Brush->Color = clWhite;
IMG->Pen->Color = clWhite;
IMG->Ellipse(xm-R,ym-R,xm+R,
for (int i=0; i<QEdg; i++)
{
IMG->Pen->Color = clWhite;
IMG->MoveTo(Points[icurr].x,
if ((Edges[i].p1.x==xm)&&(Edges[
IMG->LineTo(Edges[i].p2.x,
if ((Edges[i].p2.x==xm)&&(Edges[
IMG->LineTo(Edges[i].p1.x,
}
}
}
//----------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if ((Key == VK_DELETE)&&(Select1))
{
Select1 = false;
DelPoint(icurr);
IMG->Pen->Color = clBlack;
}
if ((Key == VK_ESCAPE)&&(Select1))
{
IMG->Brush->Color = clBlack;
IMG->Pen->Color = clBlack;
IMG->Ellipse(edge1.x-R,edge1.
Select1 = false;
}
}
//----------------------------
void __fastcall TForm1::BTkachClick(TObject *Sender)
{
Tkach();
for (int i = 0; i<size; i++)
{
IMG->Brush->Color = clYellow;
IMG->Ellipse(Points[MNM[i]].x-
}
}
//----------------------------
void __fastcall TForm1::BSave2Click(TObject *Sender)
{
if (SaveDialog2->Execute())
Form1->Image1->Picture->
}
//----------------------------
void __fastcall TForm1::BSave1Click(TObject *Sender)
{
AnsiString s;
char fname[50];
FILE *fout;
if (SaveDialog1->Execute())
s = SaveDialog1->FileName;
if (s.Length()!=0)
{
strcpy(fname,s.c_str());
fout = fopen(fname, "wt");
fprintf(fout, "%d \n", QPnt);
for (int i=0; i<QPnt; i++)
{
fprintf(fout, "%4d", Points[i].x);
fprintf(fout, "%4d", Points[i].y);
fprintf(fout, "\n");
}
fprintf(fout, "%d \n", QEdg);
for (int i=0; i<QEdg; i++)
{
fprintf(fout, "%2d", Edges[i].p1.inc);
fprintf(fout, "%2d", Edges[i].p2.inc);
fprintf(fout, "\n");
}
fclose(fout);
}
}
//----------------------------
void __fastcall TForm1::BOpenClick(TObject *Sender)
{
AnsiString s;
char fname[50];
if (OpenDialog1->Execute())
s = OpenDialog1->FileName;
if (s.Length()!=0)
{
CleanWind();
FILE *fin;
strcpy(fname,s.c_str());
fin = fopen(fname, "rt");
int Q1,Q2;
char line[50];
fgets(line, 50, fin);
sscanf(line, "%d", &Q1);
for (int i=0; i<Q1; i++)
{
int x1,y1;
fgets(line, 50, fin);
sscanf(line, "%d %d", &x1, &y1);
PutPoint(x1,y1);
}
fgets(line, 50, fin);
sscanf(line, "%d", &Q2);
for (int i=0; i<Q2; i++)
{
int p1,p2;
fgets(line, 50, fin);
sscanf(line, "%d %d", &p1, &p2);
PutEdge(Points[p1],Points[p2])
Edges[QEdg-1].p1.inc = p1;
Edges[QEdg-1].p2.inc = p2;
}
fclose(fin);
}
fBuild = true;
BRest->Enabled = true;
BDone->Enabled = true;
BRed->Enabled = false;
BTkach->Enabled = false;
BBron->Enabled = false;
BEta->Enabled = false;
Select1 = false;
Select2 = false;
}
//----------------------------
void __fastcall TForm1::BBronClick(TObject *Sender)
{
Bron();
IMG->Brush->Color = clYellow;
for (int i = 0; i<size2; i++)
IMG->Ellipse(Points[MNM2[i]].
}
//----------------------------
void __fastcall TForm1::BEtaClick(TObject *Sender)
{
Eta();
IMG->Brush->Color = clYellow;
for (int k = 0; k<QPnt; k++)
{
bool flag=true;
for (int i = 0; i<k; i++)
if ((AdjMatr[k][i]==1)||(AdjMatr[
{
flag=false;
break;
}
if (flag)
IMG->Ellipse(Points[MNM3[k]].
}
}
//----------------------------