补充一下 英文 标注:分支限界法之装载问题
来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 06:52:56
分支限界法之装载问题
做IT就要做精英,至少4000/月吧?JAVAV工程师权威认证
[上海央邦]学一送一,超值! 【安博亚威】CCIE考试通过率第一!
定向委培RHCA,通过考试年薪10W
Windows高级工程师的培训地 中国IT实验室收集整理 佚名 2009-9-25 保存本文 推荐给好友 收藏本页 欢迎进入C/C++编程社区论坛,与200万技术人员互动交流 >>进入
装载问题(分支限界)Dlg.cpp
#include "Queue.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(CAboutDlg)
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(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNewDlg dialog
CNewDlg::CNewDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNewDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CNewDlg)
m_num = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CNewDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNewDlg)
DDX_Text(pDX, IDC_EDIT_NUM, m_num);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNewDlg, CDialog)
//{{AFX_MSG_MAP(CNewDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTN_LOAD, OnBtnLoad) ON_BN_CLICKED(IDC_BTN_CLEAR, OnBtnClear)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNewDlg message handlers
BOOL CNewDlg::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(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 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
// TODO: Add extra initialization here
num=0;
j=0;
num_pri=0;
boxmark_str="";
m_num="";
return TRUE; // return TRUE unless you set the focus to a control
}
void CNewDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 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 CNewDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// 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
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CNewDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CNewDlg::EnQueue(Queue *p_obj, int wt, int &bestw,int i,int n)
{
if(i==n){
if(wt>bestw)
bestw=wt;
}
else p_obj-> add(wt);
}
int CNewDlg::MaxLoading()
{
p_obj=new Queue(1000);
p_obj->add(-1);
int i=0;//重大修改int i=1;
int Ew=0;
bestw=0;
while(true)
{
if(Ew+w[i]<=c)// Ew=w[i]<=c
EnQueue(p_obj,Ew+w[i],bestw,i,n); EnQueue(p_obj,Ew,bestw,i,n);
Ew=p_obj-> Delete();
if(Ew==-1)
{
if(p_obj-> Isempty())return bestw;
p_obj-> add(-1);
Ew=p_obj-> Delete();
i++;
}
}
}
void CNewDlg::OnBtnLoad()
{
// TODO: Add your control notification handler code here
GetDlgItemText(IDC_EDIT_AMOUNT,str);//箱子的数目
n=atoi(str);
// int *ptr=new int [n];
w=new int[n];
GetDlgItemText(IDC_EDIT_NUM,m_num);
int m=m_num.GetLength();
p=new char[m+1];
// strcpy(p,s_num);
for(int i=0;i p[i]=m_num.GetAt(i); for( i=0;i if(p[i]!=44) // num=atom(s.GetAt(i)); { p[i]-=48; num=p[i]; num_pri=num_pri*10+num; // num=0; } else { // num=num/10; if(j { w[j]=num_pri; j++; num_pri=0; } // ss=w[j]; } GetDlgItemText(IDC_EDIT_MAXLOAD,s_maxload); c=atoi(s_maxload); MaxLoading(); ss.Format("%d",bestw); SetDlgItemText(IDC_EDIT_OUTPUT,"轮船的最大载重量是:"+ss); } void CNewDlg::OnBtnClear() { // TODO: Add your control notification handler code here num=0; j=0; num_pri=0; c=0; n=0; GetDlgItemText(IDC_EDIT_NUM,m_num); if(m_num!="") { delete[]w; delete[]p; delete[]p_obj; } else { AfxMessageBox("没有输入有效字符!"); } // m_num=""; SetDlgItemText(IDC_EDIT_OUTPUT,""); SetDlgItemText(IDC_EDIT_AMOUNT,""); SetDlgItemText(IDC_EDIT_MAXLOAD,""); SetDlgItemText(IDC_EDIT_NUM,""); }