Решение задачи о коммивояжере
Автор: Пользователь скрыл имя, 11 Декабря 2011 в 07:35, реферат
Краткое описание
Сейчас решение данной задачи необходимо во многих областях связанных с замкнутыми и при этом жестко связанными по времени системами, такими как: конвейерное производство, многооперационные обрабатывающие комплексы, судовые и железнодорожные погрузочные системы, перевозки грузов по замкнутому маршруту, расчет авиационных линий.
Оглавление
Введение3
Постановка задачи4
Метод решения5
Язык программирования7
Описание алгоритма8
Описание основных структур данных12
Описание интерфейса с пользователем14
Заключение16
Литература17
Текст программы18
Файлы: 1 файл
Решение задачи о коммивояжере.doc
— 162.50 Кб (Скачать)Чтобы выделить пункт отправления коммивояжера нужно выбрать «Задать пункт отправления».
Кнопка «Параметры» вызывает диалоговое окно для ввода расстояний между городами (рис. 5). Это окно является модальным и его особенностью является то, что нет возможности перехода к родительскому окну.
Здесь пользователь может отредактировать расстояния между городами. Для этого нужно щелкнуть в поле ввода, и ввести другое значение. Перемещаться по этой «таблице» можно по строкам при помощи клавиш Tab или Shift+Tab.
По завершении ввода нужно нажать кнопку «Сохранить», чтобы программа записала измененные данные в файл. При этом автоматически проверится правильность введенный информации и все ошибки будут исправлены.
Кнопка «Отмена» позволяет не сохранять введенные изменения, если пользователь ошибся во введенной информации.
По нажатии любой из кнопок диалоговое окно «Параметры» закрывается и мы возвращаемся к главному окну .
Если в строке заголовка главного окна щелкнуть правой кнопкой мыши и выбрать пункт «О программе», то появится диалоговое окно, содержащее сведения о программе и об авторе (рис. 6). Нажав кнопку «OK» возвращаемся к главному окну.
Заключение
Был разработан алгоритм, позволяющий быстро найти кратчайший путь между городами. По алгоритму разработано приложение, решающее задачу о коммивояжере.
Литература
- Круглински Д., Программирование на Microsoft Visual C++ 6.0 для профессионалов/Пер.с англ. –СПб:Питер; 2004г. – 861 с.: ил.
- Беляев С.П. Курс лекций по «Исследованию операций».
Текст программы
// Kurs_LipinDlg.h : header file
//
#if
!defined(AFX_KURS_LIPINDLG_H__
#define
AFX_KURS_LIPINDLG_H__FFEC63D9_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CKurs_LipinDlg dialog
class CSetting;
class CKurs_LipinDlg : public CDialog
{
// Construction
public:
CKurs_LipinDlg(CWnd*
pParent = NULL);// standard constructor
int koord[29][2],x0,y0;
bool flag_select[29];
bool flag_draw;
int count_selected, n;
int begin_point;
bool flag_Bpoint;
int **table;
int tableAllCity[29][29];
unsigned int *min_path;
int *sel_city;
CString
name_city[29];
CFont myFont;
void CKurs_LipinDlg::recursiv (bool flag[],unsigned int cur_path[],int j);
// Dialog Data
//{{AFX_DATA(CKurs_
enum { IDD = IDD_KURS_LIPIN_DIALOG };
CListBoxm_list1;
CStaticm_label;
CStringm_len;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CKurs_
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON
m_hIcon;
// Generated message map functions
//{{AFX_MSG(CKurs_
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnButton2();
afx_msg void OnButton1();
virtual void OnOK();
afx_msg void OnButton3();
afx_msg void OnButton4();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
//
Microsoft Visual C++ will insert additional declarations immediately
before the previous line.
#endif
// !defined(AFX_KURS_LIPINDLG_H__
// Kurs_LipinDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Kurs_Lipin.h"
#include "Kurs_LipinDlg.h"
#include "math.h"
#include
"Setting.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////
//
CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(
//}}AFX_DATA_INIT
}
void
CAboutDlg::DoDataExchange(
{
CDialog::DoDataExchange(
//{{AFX_DATA_MAP(
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(
//{{AFX_MSG_MAP(
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////
//
CKurs_LipinDlg dialog
CKurs_LipinDlg::CKurs_
: CDialog(CKurs_LipinDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CKurs_
m_len = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon
= AfxGetApp()->LoadIcon(IDR_
}
void
CKurs_LipinDlg::
{
CDialog::DoDataExchange(
//{{AFX_DATA_MAP(CKurs_
DDX_Control(pDX, IDC_LIST1, m_list1);
DDX_Control(pDX, IDC_STATIC1, m_label);
DDX_Text(pDX, IDC_STATIC1, m_len);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CKurs_
//{{AFX_MSG_MAP(CKurs_
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()
ON_BN_CLICKED(IDC_
ON_BN_CLICKED(IDC_
ON_BN_CLICKED(IDC_
ON_BN_CLICKED(IDC_
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////
//
CKurs_LipinDlg message handlers
BOOL CKurs_LipinDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//
Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX
< 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_
pSysMenu->AppendMenu(MF_
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon,
FALSE);// Set small icon
name_city[0] = "С.-Петербург";
name_city[1] = "Псков";
name_city[2] = "Новгород";
name_city[3] = "Смоленск";
name_city[4] = "Тверь";
name_city[5] = "Вологда";
name_city[6] = "Ярославль";
name_city[7] = "Кострома";
name_city[8] = "Москва";
name_city[9] = "Брянск";
name_city[10] = "Калуга";
name_city[11] = "Иваново";
name_city[12] = "Орел";
name_city[13] = "Тула";
name_city[14] = "Владимир";
name_city[15] = "Курск";
name_city[16] = "Рязань";
name_city[17] = "Белгород";
name_city[18] = "Липецк";
name_city[19] = "Н.Новгород";
name_city[20] = "Воронеж";
name_city[21] = "Тамбов";
name_city[22] = "Чебоксары";
name_city[23] = "Саранск";
name_city[24] = "Пенза";
name_city[25] = "Ульяновск";
name_city[26] = "Саратов";
name_city[27] = "Самара";
name_city[28] = "Волгоград";
x0=10;y0=10;// смещение карты относительно левого верхнего угла окна
koord[0][0]=x0+225;// Санкт-Петербург
koord[0][1]=y0+54;
koord[1][0]=x0+148; //Псков
koord[1][1]=y0+60;
koord[2][0]=x0+195; // Новгород
koord[2][1]=y0+92;
koord[3][0]=x0+93; // Смоленск
koord[3][1]=y0+171;
koord[4][0]=x0+191; //Тверь
koord[4][1]=y0+193;
koord[5][0]=x0+301; //Вологда
koord[5][1]=y0+200;
koord[6][0]=x0+261; //Ярославль
koord[6][1]=y0+231;
koord[7][0]=x0+279;//
koord[7][1]=y0+248;
koord[8][0]=x0+181;//