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

📄 匈牙利法解分派问题dlg.cpp

📁 匈牙利法解决分派问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		strcat(num,"->第");
		itoa(quan[i]+1,num1,10);
		strcat(num,num1);
		strcat(num,"人");
			m_ListCtrl.SetItemText(i,quan[i]+1,num);
	//	}
	}
	show_select=false;
}
else {
		
		p->SetWindowText("显示选择(&S)");
	m_ListCtrl.DeleteAllItems();
	 for(int i=0;i<N;i++){
	//	sfile>>data;
		 char strdata[35];
		//c[i][0]=a[i][0]=data;
		char title[20];
		strcpy(title,"任务");
		char num[4];
		itoa(i+1,num,10);strcat(title,num);
		m_ListCtrl.InsertItem(i,title);
		strcpy(strdata,"┋ ");
		if(quan[i]==0) strcat(strdata,"*");
		else strcat(strdata," ");
			char strdata1[30];
		gcvt(c[i][0],5,strdata1);strcat(strdata,strdata1);
		m_ListCtrl.SetItemText(i,1,strdata);
		for(int j=1;j<N;j++){
			//sfile>>data;
			//c[i][j]=a[i][j]=data;
			strcpy(strdata,"┋ ");
			if(quan[i]==j) strcat(strdata,"*");
			else strcat(strdata," ");
			char strdata1[30];
			gcvt(c[i][j],5,strdata1);strcat(strdata,strdata1);
	m_ListCtrl.SetItemText(i,j+1,strdata);
		}
	}
	for(i=0;i<N+1;i++)
 m_ListCtrl.SetColumnWidth(i,100);
	show_select=true;

}
	}
	UpdateData(false);

}

void CMyDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
		for(int i=0;i<N;i++) {
		delete[] a[i];
		delete[] b[i];
		delete[] c[i];}

		delete[] zero_num;
        delete[] quan;
		delete[] h;
		delete[] l;
		delete[] h1;
		delete[] l1;
	delete []a;
	delete []b;
	delete []c;
	CDialog::OnCancel();
}

void CMyDlg::Onfileload() 
{
	word=0;
	// TODO: Add your control notification handler code here
	
    fileload dlg;
	dlg.m_static=".dat";
	if(dlg.DoModal()==IDOK){/////==IDOK)
		strcpy(newfilename,dlg.m_filename);
		strcat(newfilename,".dat");
	if(strcmp(filename,newfilename)!=0) {
		m_sum=0;
		calc=false;
		strcpy(filename,newfilename);
		for(int i=0;i<N;i++) {
		delete[] a[i];
		delete[] b[i];
		delete[] c[i];
		}

		delete[] zero_num;
        delete[] quan;
		delete[] h;
		delete[] l;
		delete[] h1;
		delete[] l1;
	delete []a;
	delete []b;
	delete []c;
	
	for( i=0;i<m_ListCtrl.GetItemCount()+1;i++)
	m_ListCtrl.DeleteColumn(0);
	m_ListCtrl.DeleteAllItems();
		ifstream sfile(filename);
	sfile>>N;
	for( i=0;i<N;i++) a=new float* [N];
	for(int j=0;j<N;j++) a[j]=new float [N];
	for(i=0;i<N;i++) b=new float* [N];
	for( j=0;j<N;j++) b[j]=new float [N];
	for( i=0;i<N;i++) c=new float* [N];
	for( j=0;j<N;j++) c[j]=new float [N];
	for(i=0;i<N;i++){
		zero_num=new int [N];
		quan=new int [N];
		h=new int [N];
		l=new int [N];
		h1=new int [N];
		l1=new int [N];
	}
	float data;	
	for(i=0;i<N;i++)
		for(int j=0;j<N;j++) {
			sfile>>data;
			c[i][j]=a[i][j]=data;
		}
			for(i=0;i<N+1;i++){
		char title[10];
		if(i==0)strcpy(title,"菜单");
		else {
			strcpy(title,"第");
		char num[4];
		itoa(i,num,10);
		strcat(title,num);
		strcat(title,"人");
		}
		lvColumn.iSubItem=i;
	lvColumn.pszText=title;
	m_ListCtrl.InsertColumn(i,&lvColumn);
	}
		char strdata[35];
   for(i=0;i<N;i++){
	//	sfile>>data;
		//c[i][0]=a[i][0]=data;
		char title[20];
		strcpy(title,"任务");
		char num[4];
		itoa(i+1,num,10);strcat(title,num);
		m_ListCtrl.InsertItem(i,title);
		strcpy(strdata,"┋ ");
		char strdata1[30];
		gcvt(a[i][0],5,strdata1);strcat(strdata,strdata1);
		m_ListCtrl.SetItemText(i,1,strdata);
		for(int j=1;j<N;j++){
			//sfile>>data;
			//c[i][j]=a[i][j]=data;
				strcpy(strdata,"┋ ");
		char strdata1[30];
			gcvt(a[i][j],5,strdata1);strcat(strdata,strdata1);
	m_ListCtrl.SetItemText(i,j+1,strdata);
		}
	}
	for(i=0;i<N+1;i++)
 m_ListCtrl.SetColumnWidth(i,100);
		sfile.close();
	}
	}
	UpdateData(false);
}

void CMyDlg::Onxieziban() 
{
	// TODO: Add your control notification handler code here
	xiezibanload dlg;
	if(dlg.DoModal()==IDOK){
		m_sum=0;
	calc=false;
	for(int i=0;i<m_ListCtrl.GetItemCount()+1;i++)
	m_ListCtrl.DeleteColumn(0);
		m_ListCtrl.DeleteAllItems();
	int max=dlg.m_hang>dlg.m_lie?dlg.m_hang:dlg.m_lie;
	ofstream ofile(filename);
	ofile<<max<<endl<<dlg.m_data<<endl;
	ofile.close();
    for(i=0;i<N;i++) {
		delete[] a[i];
		delete[] b[i];
		delete[] c[i];}

		delete[] zero_num;
        delete[] quan;
		delete[] h;
		delete[] l;
		delete[] h1;
		delete[] l1;
	delete []a;
	delete []b;
	delete []c;
	N=max;
		for(i=0;i<N;i++) a=new float* [N];
	for(int j=0;j<N;j++) a[j]=new float [N];
	for(i=0;i<N;i++) b=new float* [N];
	for( j=0;j<N;j++) b[j]=new float [N];
	for( i=0;i<N;i++) c=new float* [N];
	for( j=0;j<N;j++) c[j]=new float [N];
	for(i=0;i<N;i++){
		zero_num=new int [N];
		quan=new int [N];
		h=new int [N];
		l=new int [N];
		h1=new int [N];
		l1=new int [N];
	}
	
   	for(i=0;i<N+1;i++){
		char title[10];
		if(i==0)strcpy(title,"菜单");
		else {
			strcpy(title,"第");
		char num[4];
		itoa(i,num,10);
		strcat(title,num);
		strcat(title,"人");
		}
		lvColumn.iSubItem=i;
	lvColumn.pszText=title;
	m_ListCtrl.InsertColumn(i,&lvColumn);
	}
	ifstream sfile(filename);
	sfile>>max;
	float data;	
	if(dlg.m_hang>=dlg.m_lie){
	for(i=0;i<N;i++)
		for(int j=0;j<dlg.m_lie;j++) {
			sfile>>data;
			c[i][j]=a[i][j]=data;
			for(int k=dlg.m_lie;k<N;k++) c[i][k]=a[i][k]=0;
		}
	}
	else {
			for(i=0;i<dlg.m_hang;i++)
		for(int j=0;j<dlg.m_lie;j++) {
			sfile>>data;
			c[i][j]=a[i][j]=data;
		}
		for(;i<N;i++)
			for(int j=0;j<N;j++) c[i][j]=a[i][j]=0;
	}
		char strdata[35];
   for(i=0;i<N;i++){
	//	sfile>>data;
		//c[i][0]=a[i][0]=data;
		char title[20];
		strcpy(title,"任务");
		char num[4];
		itoa(i+1,num,10);strcat(title,num);
		m_ListCtrl.InsertItem(i,title);
			strcpy(strdata,"┋ ");
		char strdata1[30];
		gcvt(a[i][0],5,strdata1);strcat(strdata,strdata1);
		m_ListCtrl.SetItemText(i,1,strdata);
		for(int j=1;j<N;j++){
			//sfile>>data;
			//c[i][j]=a[i][j]=data;
				strcpy(strdata,"┋ ");
		char strdata1[30];
			gcvt(a[i][j],5,strdata1);strcat(strdata,strdata1);
	m_ListCtrl.SetItemText(i,j+1,strdata);
		}
	}
	for(i=0;i<N+1;i++)
 m_ListCtrl.SetColumnWidth(i,100);
		sfile.close();
		ofstream ofile1(filename);
		ofile1<<N<<endl;
		for(i=0;i<N;i++)
		{
			for(int k=0;k<N;k++) 
				ofile1<<c[i][k]<<" ";
			ofile1<<endl;
		}
		ofile1.close();
	}
	UpdateData(false);
}

void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	*pResult = 0;
}

void CMyDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	for(int i=0;i<m_ListCtrl.GetItemCount();i++){
		if(m_ListCtrl.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)
		{    select_num=i;
			select dlg;
			if(dlg.DoModal()==IDOK)
			{
			     	if(dlg.m_method==0)
					{
						bytext dlg1;
					    for(int j=0;j<N; j++) 
						{
						      char num[10];
							  double data=c[i][j];
						      gcvt(data,5,num);
							  dlg1.m_task+=num;
                               dlg1.m_task+="   ";		 
						}
						char edit[5000];
						strcpy(edit,dlg1.m_task);
					if(dlg1.DoModal()==IDOK)
					{
						if(strcmp(dlg1.m_task,edit)!=0){
						calc=false;
						ofstream ofile(filename);
						ofile<<N<<endl;
						for(int i=0;i<N;i++)
						{
							if(i!=select_num)
							   {
			               for(int k=0;k<N;k++) 
							   
								   ofile<<c[i][k]<<" ";
								     ofile<<endl;
							   }
							else 
								ofile<<dlg1.m_task<<endl;
						}
		            ofile.close();
					ifstream sfile(filename);
					sfile>>N;
					for(i=0;i<N;i++)
						for(int j=0;j<N;j++)
						{sfile>>a[i][j];
						c[i][j]=a[i][j];
						}
						sfile.close();
						m_ListCtrl.DeleteAllItems();
				char strdata[35];
         for(i=0;i<N;i++){
	//	sfile>>data;
		//c[i][0]=a[i][0]=data;
		char title[20];
		strcpy(title,"任务");
		char num[10];
		itoa(i+1,num,10);strcat(title,num);
		m_ListCtrl.InsertItem(i,title);
			strcpy(strdata,"┋ ");
		char strdata1[30];
		gcvt(a[i][0],5,strdata1);strcat(strdata,strdata1);
		m_ListCtrl.SetItemText(i,1,strdata);
		for(int j=1;j<N;j++){
			//sfile>>data;
			//c[i][j]=a[i][j]=data;
				strcpy(strdata,"┋ ");
		char strdata1[30];
			gcvt(a[i][j],5,strdata1);strcat(strdata,strdata1);
	         m_ListCtrl.SetItemText(i,j+1,strdata);
		}
	}
					}
					}
					}
				else 
				{
					change_data=new char* [N];
					for(int k=0;k<N;k++)
						change_data[k]=new char [10];
					bylist dlg2;
					if(dlg2.DoModal()==IDOK){
						if(changed==true){
							calc=false;
							for(int j=0;j<N;j++){
								char changedata1[10];
									strcpy(changedata1,"┋ ");
								strcat(changedata1,change_data[j]);
						m_ListCtrl.SetItemText(select_num,j+1,changedata1);
							}
						}
					}
					for(k=0;k<N;k++) delete []change_data[k];
					delete [] change_data;
				}
		}
	}
	}
	UpdateData(false);
	*pResult = 0;
}

void CMyDlg::OnHelp() 
{
	// TODO: Add your control notification handler code here
	help dlg;
	dlg.m_contest+="    \t 本程序由matrix制作完成!!!    \t\t  〖使用帮助〗\t\t\t\t\t①本程序用于分派问题最优化规划的解决。\t\t②可采用从外部文件中的数据加载到程序中,亦可自己书写写字板加载到程序中!@\t\t\t③如若想对数据进行修改只需双击要修改数据所在的行,然后根据需要可选择文本方式修改或列表方式修改。\t\t\t\t\t(文本方式主要用于对某一行数据的集体修改;列表方式是对某一行的某一个数据进行单个修改,同样只需双击即可修改其值)。\t\t\t\t\t翻版必究!谢谢";
	dlg.DoModal();
}

void CMyDlg::OnSet() 
{UpdateData();
	// TODO: Add your control notification handler code here
	for(int i=0;i<m_ListCtrl.GetItemCount()+1;i++)  m_ListCtrl.SetColumnWidth(i,m_width);
	UpdateData(false);
}

void CMyDlg::OnWord() 
{
	word=1;
	// TODO: Add your control notification handler code here
	fileload dlg;
	dlg.m_static=".doc";
	if(dlg.DoModal()==IDOK){
		strcpy(newfilename,dlg.m_filename);
	strcat(newfilename,".doc");
		ofstream ofile(newfilename);
	for(int i=0;i<N;i++){
		for(int j=0;j<N-1;j++)
			ofile<<c[i][j]<<"\t";
		ofile<<c[i][j]<<endl;
}
	ofile.close();
	AfxMessageBox("导出Word中成功!!!",MB_ICONINFORMATION);
	}
}

void CMyDlg::Onexcel() 
{
	// TODO: Add your control notification handler code here
	word=2;
	// TODO: Add your control notification handler code here
	fileload dlg;
	dlg.m_static=".xls";
	if(dlg.DoModal()==IDOK){
		strcpy(newfilename,dlg.m_filename);
	strcat(newfilename,".xls");
		ofstream ofile(newfilename);
	for(int i=0;i<N;i++){
		for(int j=0;j<N-1;j++)
			ofile<<c[i][j]<<"\t";
		ofile<<c[i][j]<<endl;
}
	ofile.close();
	AfxMessageBox("导出到Excel中成功!!!",MB_ICONINFORMATION);
	}
	
}

⌨️ 快捷键说明

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