补充一下 英文 标注:分支限界法之装载问题

来源:百度文库 编辑:九乡新闻网 时间: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,"");

    }