⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getresult.cpp

📁 k乘积问题的分支界限法实现, 并且给出了划分结果 ,很好理解
💻 CPP
字号:
// getresult.cpp : implementation file
//

#include "stdafx.h"
#include "kchengji.h"
#include "getresult.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// getresult

IMPLEMENT_DYNCREATE(getresult, CCmdTarget)

getresult::getresult()
{

}
getresult::~getresult()
{

}


BEGIN_MESSAGE_MAP(getresult, CCmdTarget)
	//{{AFX_MSG_MAP(getresult)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// getresult message handlers



void getresult::set(int mtarget, int mnum)
{
target=mtarget; length=mnum;
}





int getresult::begend(int beg, int end)//此函数求beging 到 end位的值 比如说24566 则geneng(2,3)位45
{
int t;
int k=pow(10,length-end);
t=target/k;
int l=pow(10,end-beg+1);
t=t%l;
return t;
}

void getresult::get()
{
	max=0;

 int recordnum=1;
 int i=1;
 for(int j=1;j<length;j++)
 {
	 int temp=begend(1,j);
	 //-1标记第一次分裂所得记录
	 node *node1=new node (j,temp,-1) ;
     midlist.AddTail(node1);
	 res[i].set(j,temp,-1);
	 i++;
	 while(!midlist.IsEmpty())
	 {  
		 node *node2;

		 node2=midlist.RemoveHead();
		 
		 if(node2->endpos==length)
		 {
			 if (node2->nowmul>max)
				 
			 {
				 max=node2->nowmul;
				 endposrec=recordnum;
			 }

		 }
		 else
		 {
			 for(int j=node2->endpos+1;j<=length;j++)
			 {
				 temp=begend(node2->endpos+1,j);
				 int now=temp*(node2->nowmul);
				 node *node3;
				 node3=new node(j,now,recordnum);
				 res[i].set(j,now,recordnum);
				 i++;
	              
                 midlist.AddTail(node3);
				 }
		 }
          recordnum++;
  		 }
       }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -