Автор: Пользователь скрыл имя, 11 Декабря 2011 в 07:35, реферат
Сейчас решение данной задачи необходимо во многих областях связанных с замкнутыми и при этом жестко связанными по времени системами, такими как: конвейерное производство, многооперационные обрабатывающие комплексы, судовые и железнодорожные погрузочные системы, перевозки грузов по замкнутому маршруту, расчет авиационных линий.
Введение3
Постановка задачи4
Метод решения5
Язык программирования7
Описание алгоритма8
Описание основных структур данных12
Описание интерфейса с пользователем14
Заключение16
Литература17
Текст программы18
koord[8][1]=y0+241;
koord[9][0]=x0+76;//
koord[9][1]=y0+240;
koord[10][0]=x0+133;//
koord[10][1]=y0+245;
koord[11][0]=x0+256;//
koord[11][1]=y0+264;
koord[12][0]=x0+88;//Орел
koord[12][1]=y0+275;
koord[13][0]=x0+139;//
koord[13][1]=y0+272;
koord[14][0]=x0+227;//
koord[14][1]=y0+274;
koord[15][0]=x0+55;//
koord[15][1]=y0+297;
koord[16][0]=x0+176;//
koord[16][1]=y0+297;
koord[17][0]=x0+29;//
koord[17][1]=y0+328;
koord[18][0]=x0+121;//
koord[18][1]=y0+338;
koord[19][0]=x0+276;//
koord[19][1]=y0+322;
koord[20][0]=x0+92;//
koord[20][1]=y0+353;
koord[21][0]=x0+149;//
koord[21][1]=y0+364;
koord[22][0]=x0+307;//
koord[22][1]=y0+373;
koord[23][0]=x0+237;//
koord[23][1]=y0+388;
koord[24][0]=x0+212;//
koord[24][1]=y0+408;
koord[25][0]=x0+280;//
koord[25][1]=y0+429;
koord[26][0]=x0+184;//
koord[26][1]=y0+456;
koord[27][0]=x0+292;//
koord[27][1]=y0+491;
koord[28][0]=x0+91;//
koord[28][1]=y0+506;
count_selected=0;
myFont.CreateFont(17,0,0,
m_len="Выберите несколько городов.";
m_label.SetFont (&myFont);
UpdateData(false);
for (int i=0; i < 29; i++)
flag_select[i]=false;
flag_draw=false;
begin_point = -1;
flag_Bpoint=false;
CStdioFile f1;
f1.Open("table.ini",
for ( i=0; i < 29; i++)
{
tableAllCity[i][i]=0;
CString s1;
f1.ReadString(s1);
int j=i+1;
int k=0;
while (j<29 && k < s1.GetLength())
{CString s2;
while (s1[k] == ' ') k++;
while (s1[k] != ' ')
{ s2 += s1[k]; k++;}
tableAllCity[j][i]=
j++;
}
}
return TRUE; // return TRUE unless you set the focus to a control
}
void
CKurs_LipinDlg::OnSysCommand(
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
//
this is automatically done for you by the framework.
void CKurs_LipinDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC
dc(this); // device context for painting
SendMessage(WM_
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int
y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CClientDC pDC(this);
CDC temp;
CBitmap bmp;
bmp.LoadBitmap(IDB_
temp.CreateCompatibleDC (&pDC);
temp.SelectObject(bmp);
for (int j=0;j<29;j++)
{
if (flag_select[j])
{
int x=koord[j][0]-x0;
int
y=koord[j][1]-y0;
temp.SelectStockObject (BLACK_BRUSH);
temp.Ellipse(x-3,y-3,x+3,
}
}
if (begin_point>=0)
{
int x=koord[begin_point][0]-x0;
int y=koord[begin_point][1]-y0;
CBrush br (RGB(255,0,0));
temp.SelectObject (&br);
temp.Ellipse(x-4,y-4,x+4,
}
if (flag_draw)
{
for (int i = 0; i < n; i++)
{
int
x1 = koord[sel_city[min_path[i]-1]]
int
x2 = koord[sel_city[min_path[i+1]-
int
y1 = koord[sel_city[min_path[i]-1]]
int
y2 = koord[sel_city[min_path[i+1]-
temp.MoveTo(x1-x0,y1-y0);
temp.LineTo(x2-x0,y2-y0);
}
CString
s1;
m_list1.ResetContent();
for (i=0;i < n; i++)
{
s1=name_city[sel_city[
s1+="
- "+name_city[sel_city[min_path[
CString s2;
s2.Format("%d",table[min_
s1+=" ->"+s2;
m_list1.AddString(s1);
}
m_len.Format("Длина пути:\n%d км",min_path[n+1]);
for (i=0;i < n; i++)
{
if (i % 2 != 0) m_list1.SetSel(i);
}
}
else
{
m_len="Выберите
несколько городов.";
}
UpdateData(false);
pDC.BitBlt(x0,y0,638,638,
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR
CKurs_LipinDlg::
{
return (HCURSOR) m_hIcon;
}
void
CKurs_LipinDlg::OnLButtonDown(
{
for (int i=0;i<29;i++)
{
int
x=point.x-koord[i][0],y=point.
if((x*x+y*y)<=7*7)
{
if (flag_Bpoint)
{
if (count_selected >= 13 && flag_select[i]==false)
{
MessageBox
("Нельзя выбрать более 13 городов
!!!\nВыберите выделенный
flag_Bpoint=false;
Invalidate(false);
}
else
{
begin_point=i;
flag_Bpoint=false;
if
(flag_select[i]==false) count_selected++;
flag_select[i]=true;
flag_draw=false;
Invalidate(false);
}
}
else
{
if (count_selected >= 13 && flag_select[i]==false)
{
MessageBox ("Нельзя выбрать более 13 городов !!!");
}
else
{
if (flag_select[i]==false) count_selected++;
else
{
count_selected--;
if (i == begin_point)
{
begin_point=-1;
}
}
flag_select[i]=!flag_
flag_draw=false;
Invalidate(false);
}
}
}
}
CDialog::OnLButtonDown(
}
void CKurs_LipinDlg::OnButton1()
{
m_list1.ResetContent();
for (int i=0; i < 29; i++)
flag_select[i]=false;
flag_select[6]=true;
flag_select[8]=true;
flag_select[12]=true;
flag_select[13]=true;
flag_select[15]=true;
flag_select[18]=true;
flag_select[19]=true;
flag_select[20]=true;
flag_select[21]=true;
flag_select[26]=true;
flag_select[27]=true;
flag_select[28]=true;
flag_select[24]=true;
count_selected=13;
flag_draw=false;
flag_Bpoint = false;
begin_point
= -1;
Invalidate(false);
}
void CKurs_LipinDlg::OnButton2()
{
m_list1.ResetContent();
for (int i=0; i < 29; i++)
flag_select[i]=false;
flag_Bpoint = false;
begin_point = -1;
count_selected = 0;
flag_draw = false;
Invalidate
(false);
}
void CKurs_LipinDlg::OnOK()
{
m_list1.ResetContent();
n
= count_selected;
if (n <=1)
{
MessageBox ("Пожалуйста, выберите не менее 2 городов.");
return;
}
sel_city= new int[n];
int count = 0;
for (int i=0; i < 29; i++)
if
(flag_select[i]) sel_city[count++] = i;
for (i=0; i < n; i++)// ставим исходный город на первое место в массиве
if (sel_city[i] == begin_point)