分支限界法之装载问题
来源:优易学  2011-12-10 17:18:18   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  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<m;i++)

  p[i]=m_num.GetAt(i);

  for( i=0;i<m;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<n)

  {

  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,"");

  }

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训