Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
43
Добавлен:
28.06.2014
Размер:
5.88 Кб
Скачать
//---------------------------------------------------------------------------

#include <vcl.h>
#include <string.h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString aFileName,St;

//---------------------------------------------------------------------------
int E[45][2];						// Матрица рёбер графа
int K[10]={1,2,3,4,5,6,7,8,9,10};
int w[45];							// Вектор весов рёбер
int L[45];                  		// Вектор номеров рёбер, упорядоченных по неубыванию весов
int MIN[9];							// Вектор номеров рёбер, входящих в минимальный остов
int n=0, m=0, i, Dub, Nmin;
bool fl;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	aFileName = "";
	SpeedButton1->OnClick = imOpenClick;
	SpeedButton2->OnClick = imSaveClick;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::imOpenClick(TObject *Sender)
{
	OpenDialog1->FileName = "*.txt";
	OpenDialog1->Options<<ofPathMustExist<<ofFileMustExist;
	if (OpenDialog1->Execute())
	{
		RichEdit1->Lines->Clear();
		RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
		aFileName=OpenDialog1->FileName;
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::imSaveClick(TObject *Sender)
{
	aFileName = "Результат";
	SaveDialog1->FileName = aFileName;
	if (SaveDialog1->Execute())
	{
	switch (SaveDialog1->FilterIndex)
		{
			case 1 : aFileName+=".txt"; break;
			case 2 : aFileName+=".doc"; break;
		}
		RichEdit1->Lines->SaveToFile (aFileName);
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
	for (i=0; i < m; i++)
	{
		E[i][0]=0;
		E[i][1]=0;
	}
	n=m=0;
	Button7->Enabled=false;
	Button6->Enabled=false;
	Button2->Enabled=false;
	Button1->Enabled=true;
	Edit1->Enabled=true;
	Edit2->Enabled=false;
	Edit3->Enabled=false;
	Edit4->Enabled=false;
	Edit1->Text="0";
	Edit1->SetFocus();
	RichEdit1->Lines->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	if ((StrToInt(Edit1->Text) <= 10) && StrToInt(Edit1->Text))
	{
		n=StrToInt(Edit1->Text);
		Button1->Enabled=false;
		Button2->Enabled=true;
		Button6->Enabled=true;
		Edit1->Enabled=false;
		Edit2->Enabled=true;
		Edit3->Enabled=true;
		Edit4->Enabled=true;
	}
	else
	{
		MessageDlg("Число вершин не может превышать 10 или равняться 0!",mtError,TMsgDlgButtons()<<mbOK,0);
		return;
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
	if ((Edit2->Text>n) || (Edit2->Text<1) || (Edit3->Text>n) || (Edit3->Text < 1))
	{
		MessageDlg("Вершин, формирующих ребро, нет!",mtError,TMsgDlgButtons()<<mbOK,0);
		Edit2->SetFocus();
		return;
	}
	else
	{
		for (i = 0; i < m; i++)
		{
			if ((E[i][0] == StrToInt(Edit2->Text)) && (E[i][1] == StrToInt(Edit3->Text)) ||
				(E[i][1] == StrToInt(Edit2->Text)) && (E[i][0] == StrToInt(Edit3->Text)))
			{
				MessageDlg("Такое ребро уже существует!",mtError,TMsgDlgButtons()<<mbOK,0);
				Edit2->SetFocus();
				return;
			}
		}
		E[m][0]=StrToInt(Edit2->Text);
		E[m][1]=StrToInt(Edit3->Text);
		w[m]=(E[m][0]+E[m][1])%10;
		Edit2->Text="0";
		Edit3->Text="0";
		Edit4->Text="0";
		Edit2->SetFocus();
		Button7->Enabled=true;
		m++;
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender){Form1->Close();}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
	Button2->Enabled=false;
	Edit2->Enabled=false;
	Edit3->Enabled=false;
	Edit4->Enabled=false;

	// Условие задачи

	RichEdit1->Lines->Clear();
	RichEdit1->Lines->Add("Имеется неориентированный граф G.");
	RichEdit1->Lines->Add("");
	RichEdit1->Lines->Add("G=(V,E,w)");
	St="V={1";
	for (i=2; i <= n; i++) St=St+","+IntToStr(i);
	St+="}";
	RichEdit1->Lines->Add(St);
	St="E={("+IntToStr(E[0][0])+","+IntToStr(E[0][1])+")";
	for(i=1; i < m; i++) St=St+",("+IntToStr(E[i][0])+","+IntToStr(E[i][1])+")";
	St+="}";
	RichEdit1->Lines->Add(St);
	St="w={"+IntToStr(w[0]);
	for(i=1; i < m; i++) St=St+","+IntToStr(w[i]);
	St+="}";
	RichEdit1->Lines->Add(St);
	for (i = 0; i < 15; i++)
		RichEdit1->Lines->Add("");
	St="";

	//Упорядочивание рёбер по не убыванию весов

	for (i = 0; i < m; i++)
		L[i]=i;

	fl=true;
	while (fl)
	{
		fl = false;
		for (i = 0; i < m-1; i++)
			if (w[L[i]]>w[L[i+1]])
			{
				Dub=L[i];
				L[i]=L[i+1];
				L[i+1]=Dub;
				fl=true;
			}
	}

	//Поиск остова минимального веса (алгоритм Краскала)

	Nmin=0;
	i=0;
	while (Nmin<(n-1))
	{
		if (K[E[L[i]][0]-1]!=K[E[L[i]][1]-1])
		{
			K[E[L[i]][0]-1]=K[E[L[i]][1]-1];
			MIN[Nmin]=L[i]+1;
			Nmin++;
		}
		i++;
	}
	St="Минимальный остов     e"+IntToStr(MIN[0]);
	for(i=1; i < Nmin; i++) St=St+" e"+IntToStr(MIN[i]);
	RichEdit1->Lines->Add(St);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{
	if ((Key>='0')&&(Key<='9') || (Key == VK_BACK)) return;
	Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
	if (PrintDialog1->Execute())
		RichEdit1->Print("Печать");
}
//---------------------------------------------------------------------------

Соседние файлы в папке LAB 3
  • #
    28.06.20147.95 Кб41Project3.cbproj
  • #
    28.06.20144.18 Кб41Project3.cbproj.local
  • #
    28.06.2014915 б42Project3.cpp
  • #
    28.06.201410.66 Кб41Project3.res
  • #
    28.06.20145.88 Кб43Unit3.cpp
  • #
    28.06.201431.44 Кб41Unit3.dfm
  • #
    28.06.20141.76 Кб42Unit3.h