CTime *time = base.get_path_time();
for (i=0; i<base.get_num_city(); ++i)
for (j=0; j<base.get_num_city();++j)
if (!time[i*base.get_num_city()+j].null())
{
moveto(coor[2*i], coor[2*i+1]);
lineto(coor[2*j], coor[2*j+1]);
}
// рисование лучшего пути
setlinestyle(SOLID_LINE, 1, 3);
if (base.get_len_best_path()>1)
{
char *best_path = base.get_best_path();
setcolor(RED);
moveto(coor[2*best_path[0]],coor[2*best_path[0]+1]);
for (i=0; i<base.get_len_best_path(); ++i)
lineto(coor[2*best_path[i]],coor[2*best_path[i]+1]);
}
// Завершающая часть
getch();
setbkcolor(BLACK);
cleardevice();
Application.mainform.draw();
}
}
/////// METHODS CQUITBUTTON ///////
CQuitButton::CQuitButton():CButton()
{
caption = "Выход";
}
void CQuitButton::press_key(CApplication &Application, unsigned char key)
{
if (key==13)
{
down_up();
Application.terminate();
}
}
/////// METHODS CFORM ///////
CForm::CForm():CObject()
{
caption = "Ввод данных";
city1.set(320, 145, 130, 15);
city2.set(320, 165, 130, 15);
label1.set(170, 150, "Пункт отправления: ");
label2.set(170, 170, "Пункт назначения: ");
find.set(280, 280, 80, 25);
quit.set(370, 280, 80, 25);
city1.set_focus(FOCUSED);
city2.set_focus(NOT_FOCUSED);
find.set_focus(NOT_FOCUSED);
quit.set_focus(NOT_FOCUSED);
}
void CForm::draw()
{
int poly[8];
setcolor(WHITE);
setlinestyle(SOLID_LINE, 1, 1);
settextstyle(GOTHIC_FONT,HORIZ_DIR, 4);
outtextxy(300, 0, "Russian Train Network");
settextstyle(DEFAULT_FONT,HORIZ_DIR, 1);
setfillstyle(SOLID_FILL, 7);
poly[0] = x;
poly[1] = y;
poly[2] = x+width;
poly[3] = y;
poly[4] = x+width;
poly[5] = y+height;
poly[6] = x;
poly[7] = y+height;
fillpoly(4, poly);
setfillstyle(SOLID_FILL, 1);
poly[5] = y+15; poly[7] = y+15;
fillpoly(4, poly);
setcolor(WHITE);
outtextxy(x+4, y+4, caption.get_data());
city1.draw();
city2.draw();
label1.draw();
label2.draw();
find.draw();
quit.draw();
}
void CForm::draw_elem()
{
city1.draw(); city2.draw();
label1.draw(); label2.draw();
find.draw(); quit.draw();
}
void CForm::press_key(unsigned char key)
{
if (key=='\t')
{
if (city1.focused())
{
city1.set_focus(NOT_FOCUSED);
city2.set_focus(FOCUSED);
}
else
if (city2.focused())
{
city2.set_focus(NOT_FOCUSED);
find.set_focus(FOCUSED);
}
else
if (find.focused())
{
find.set_focus(NOT_FOCUSED);
quit.set_focus(FOCUSED);
}
else
if (quit.focused())
{
quit.set_focus(NOT_FOCUSED);
city1.set_focus(FOCUSED);
}
}
else
if (city1.focused()) city1.press_key(key);
else
if (city2.focused()) city2.press_key(key);
else
if (find.focused()) find.press_key(Application, key);
else
quit.press_key(Application, key);
draw_elem();
}
/////// METHODS CAPPLICATION ///////
CApplication::CApplication()
{
int gdriver = VGA; // Драйвер
int gmode = VGAHI; // Режим
initgraph(&gdriver, &gmode, "egavga.bgi");
Quit = graphresult();
if (Quit)
{
printf("Graphics error: %s\n", grapherrormsg(0));
printf("Press any key...\n");
getch();
}
else
{
setbkcolor(BLACK);
mainform.set(160,120,300, 200);
mainform.draw();
}
}
CApplication::~CApplication()
{
closegraph();
}
void CApplication::execute()
{
char key;
key = 0;
while (!Quit)
{
key = getch();
if (key == 27) Quit = 1;
else
mainform.press_key(key);
}
}
void CApplication::terminate()
{
Quit = 1;
}
Головной модуль:
#ifndef _LAB4MAIN_H
#define _LAB4MAIN_H
#include <stdio.h>
#include <conio.h>
#include "app.h"
#endif
#include "MainUnit.h"
CApplication Application;
int main()
{
Application.execute();
return 0;
}
Недостатки этого решения:
Результаты работы программы:
рис. 1. Ввод данных
рис. 2. Наилучший маршрут
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.