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

📄 算法源程序.txt

📁 这个算法设计
💻 TXT
字号:
#include <stdio.h>
#define  M  42
#define  N  20
int CalcheckinValue(double CB[],double **matrix,double checkin[],double Z[],int m,int Row)
{   
	int i,j,n=-1;
	double Min=0;
	double var;
	double sum=0;
	for(i=0;i<m;i++)
	{	for(j=0;j<Row;j++)
	// sum[i]+=CB[j]*matrix[j][i];
	{ 
		var=*((double*)matrix + m*j+ i);
		sum+=CB[j]*var;
	}
	checkin[i]=Z[i]-sum;
	sum=0;
	}
	for(i=0;i<m;i++)
		if(Min>checkin[i])
		{
			Min = checkin[i];
			n=i;
		}
		return n;
}
int CalcheckoutValue(double b[],double **matrix,double checkout[],int n,int Row,int col)
{   
	int i,m;
	double var;
	double Min=1000000;
	for(i=0;i<Row;i++)
		if(*((double*)matrix + col*i + n)==0)
			checkout[i] =1000000;
		else
		{   var=*((double*)matrix +col*i + n);
	checkout[i]=b[i]/var;
	}
	for(i=0;i<Row;i++)
		if(Min>checkout[i]&&checkout[i]>0)
		{
			Min = checkout[i];
			m=i;
		}
		return m;
}
void  Alg(double Z[],double **matrix, double CB[], double **BMatrix, double checkout[], double checkin[], int x[],double b[],int m,int n)//自变量的序号
{
	int RowIndex,ColumnIndex;//换出变量的行   换入变量的列
	double s=0;
	double RotatePoint=0;//旋转主元
	double MultiNumber=0;// 化简标准型	
	int i,j;
	double var ;
	for(i=0;i<n;i++)
		for(j=0;j<m-n;j++)
		{    
			var= *((double*)matrix + m*i + j)*0.3;
			b[i]-= var;
		}
		while(CalcheckinValue( CB,matrix,checkin,Z,m,n)!=-1)
		{
			ColumnIndex =CalcheckinValue( CB,matrix,checkin,Z,m,n);
			RowIndex=CalcheckoutValue(b,matrix,checkout, ColumnIndex,n,m);
			x[RowIndex]= ColumnIndex;
			for(i=0;i<n;i++)
				*((double*)BMatrix+i*(m+1)+0)=b[i];
			for(i=0;i<n;i++)
				for(j=1;j<m+1;j++)
				{
					*((double*)BMatrix+i*(m+1)+j)=*((double*)matrix + m*i+ j-1);
				}
				RotatePoint=*((double*)BMatrix+RowIndex*(m+1)+ColumnIndex+1);
				for(i=0;i<m+1;i++)
					*((double*)BMatrix+RowIndex*(m+1)+i)=*((double*)BMatrix+RowIndex*(m+1)+i)/RotatePoint;
				for(i=0;i<n;i++)	
				{	
					if(i!=RowIndex)
					{
						MultiNumber=*((double*)BMatrix+i*(m+1)+ColumnIndex+1);	 
						for(j=0;j<m+1;j++)
						{   var=*((double*)BMatrix+RowIndex*(m+1)+j);
						*((double*)BMatrix+i*(m+1)+j)=*((double*)BMatrix+i*(m+1)+j)-MultiNumber*var;
						}
					}
				}
				for(i=0;i<n;i++)
					b[i]=*((double*)BMatrix+i*(m+1)+0);
				for(i=0;i<n;i++)
					for(j=1;j<m+1;j++)
						*((double*)matrix + m*i + j-1)=	*((double*)BMatrix+i*(m+1)+j);
				CB[RowIndex]=Z[ColumnIndex];
		}

}

int main()
{
	//int RowIndex,ColumnIndex;//换出变量的行   换入变量的列
	//double Z[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};//目标函数的系数

	//double b[2]={2,10};//约束方程的等式的右值
	//double matrix[2][5]={-2,1,3,1,0,2,3,4,0,1};//约束方程的系数
	//double matrix[8][30]={144,15,17,29,21,144,167,113,87.8,98.6,89.4,28,81,15,150,167,67.4,19,76,69,44.6,17,-1,0,0,0,0,0,0,0,
	//                         144,15,17,29,21,144,167,113,87.8,98.6,89.4,28,81,15,150,167,67.4,19,76,69,44.6,17,0,1,0,0,0,0,0,0,
	//                         144,15,17,29,21,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,
	//                         144,15,17,29,21,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,0,
	//                         0,0,0,0,0,0,167,113,87.8,98.6,89.4,28,81,15,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,
	//                         0,0,0,0,0,0,167,113,87.8,98.6,89.4,28,81,15,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0.0,
	//                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,167,67.4,19,76,69,44.6,17,0,0,0,0,0,0,-1,0,
	//                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,167,67.4,19,76,69,44.6,17,0,0,0,0,0,0,0,1
	//                      };
	//double b[8]={100000,110000,25000,27000,44000,45500,36000,38000};
	//
	//double CB[8]={1,1,1,1,1,1,1,1};//基变量的系数
	//double BMatrix[8][31]={0};//扩转矩阵
	//double checkout[8]={0};
	//double checkin[30]={0};
	//int x[8]={22,23,24,25,26,27,28,29};//自变量的序号
	//double matrix[8][30]={144,15,17,29,21,144,167,113,87.8,98.6,89.4,28,81,15,150,167,67.4,19,76,69,44.6,17,-1,0,0,0,0,0,0,0,
	//                         144,15,17,29,21,144,167,113,87.8,98.6,89.4,28,81,15,150,167,67.4,19,76,69,44.6,17,0,1,0,0,0,0,0,0,
	//                         144,15,17,29,21,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,
	//                         144,15,17,29,21,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,0,
	//                         0,0,0,0,0,0,167,113,87.8,98.6,89.4,28,81,15,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,
	//                         0,0,0,0,0,0,167,113,87.8,98.6,89.4,28,81,15,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0.0,
	//                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,167,67.4,19,76,69,44.6,17,0,0,0,0,0,0,-1,0,
	//                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,167,67.4,19,76,69,44.6,17,0,0,0,0,0,0,0,1
	//                      };
	//DisheAmount dishesamount[M-N];
	double Z[M]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
	double matrix[N][M]={126.72,13.8,14.79,28.8,29.45,126.72,110.22,115.2,63,143,85.752,26.88,81,12.15,88.5,168.96,56.73,14.82,160.664,61.746,28.592,17.22,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		126.72,13.8,14.79,28.8,29.45,126.72,110.22,115.2,63,143,85.752,26.88,81,12.15,88.5,168.96,56.73,14.82,160.664,61.746,28.592,17.22,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		126.72,13.8,14.79,28.8,29.45,126.72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		126.72,13.8,14.79,28.8,29.45,126.72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,110.22,115.2,63,143,85.752,26.88,81,12.15,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,110.22,115.2,63,143,85.752,26.88,81,12.15,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,0,0,0,0,0,0,0,0,88.5,168.96,56.73,14.82,160.664,61.746,28.592,17.22,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,0,0,0,0,0,0,0,0,88.5,168.96,56.73,14.82,160.664,61.746,28.592,17.22,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
		514.8,0,0,0,0,514.8,69.96,34.3,30.456,81,0,0,0,0,21.24,109.56,117.73,0,109.6,205.92,11.6,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,
		514.8,0,0,0,0,514.8,69.96,34.3,30.456,81,0,0,0,0,21.24,109.56,117.73,0,109.6,205.92,11.6,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
		205.92,13.8,17.4,31.68,9.5,205.92,31.68,0,20.844,44,12.56,33.6,0,48.6,6.49,91.74,9.15,448.5,15.176,135.912,6.48,206.64,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,
		205.92,13.8,17.4,31.68,9.5,205.92,31.68,0,20.844,44,12.56,33.6,0,48.6,6.49,91.74,9.15,448.5,15.176,135.912,6.48,206.64,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
		0,8.28,26.97,17.28,13.3,0,0,0,20.832,0,20.304,5.76,0,16.2,0,0,0,59.28,10.416,11.058,6.336,14.76,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,
		0,8.28,26.97,17.28,13.3,0,0,0,20.832,0,20.304,5.76,0,16.2,0,0,0,59.28,10.416,11.058,6.336,14.76,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
		1.6192,0.4508,0.6612,2.1504,0.209,1.6192,0.4422,2.90325,0.7356,0.34,0.32368,1.1904,2.71,0,0,0.8844,0.3782,0.7488,0.54784,0.97942,1.23688,0.7544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,
		1.6192,0.4508,0.6612,2.1504,0.209,1.6192,0.4422,2.90325,0.7356,0.34,0.32368,1.1904,2.71,0,0,0.8844,0.3782,0.7488,0.54784,0.97942,1.23688,0.7544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
		1,0,0,0,0,1,1,0.7,0.6,1,0.2,0,0,0,1,1,1,0,0.8,0.4,0.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,
		1,0,0,0,0,1,1,0.7,0.6,1,0.2,0,0,0,1,1,1,0,0.8,0.4,0.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
		0,1,1,1,1,0,0,0,0.4,0,0.8,1,0,1,0,0,0,1,0.2,0.6,0.8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,
		0,1,1,1,1,0,0,0,0.4,0,0.8,1,0,1,0,0,0,1,0.2,0.6,0.8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};
	double b[N]={90000,93000,10000,12000,40000,43000,34000,37000,80000,90000,10000,12000,16000,18000,1200,1500,500,600,700,800};
	double CB[N]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//基变量的系数
	double BMatrix[N][M+1]={0};//扩转矩阵
	double checkout[N]={0};
	double checkin[M]={0};
	double dishesamount[M-N]={0};
	//double OptiValuble=0;//目标函数最终的最优解
	int m=M,n=N;//m表示目标函数自变量的个数  n 约束方程的个数	
	int i;
	int x[N]={22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41};//自变量的序号
	Alg(Z,matrix,&CB,BMatrix,checkout,checkin,&x,&b,m,n);
	//double s=0;
	//double RotatePoint=0;//旋转主元
	//double MultiNumber=0;// 化简标准型
	//double 	OptiValuble=0;//目标函数最终的最优解
	//int m=42,n=20;//m表示目标函数自变量的个数  n 约束方程的个数	
	//int i,j;
	//for(i=0;i<n;i++)
	//	for(j=0;j<m-n;j++)
	//	{
	//	b[i]-=matrix[i][j]*0.3;
	//	}
	//while(CalcheckinValue( CB,matrix,checkin,Z,m,n)!=-1)
	//{
	//	ColumnIndex =CalcheckinValue( CB,matrix,checkin,Z,m,n);
	//	RowIndex=CalcheckoutValue(b,matrix,checkout, ColumnIndex,n);
	//	x[RowIndex]= ColumnIndex;
	//	for(i=0;i<n;i++)
	//		BMatrix[i][0]=b[i];
	//	for(i=0;i<n;i++)
	//		for(j=1;j<m+1;j++)
	//		{
	//			BMatrix[i][j]=matrix[i][j-1];
	//		}
	//		RotatePoint=BMatrix[RowIndex][ColumnIndex+1];
	//		for(i=0;i<m+1;i++)
	//			BMatrix[RowIndex][i]=BMatrix[RowIndex][i]/RotatePoint;
	//		for(i=0;i<n;i++)	
	//		{	
	//			if(i!=RowIndex)
	//		    {
	//			   MultiNumber=BMatrix[ i][ColumnIndex+1];
	//		       for(j=0;j<m+1;j++)
	//                  BMatrix[i][j]=BMatrix[i][j]-MultiNumber*BMatrix[RowIndex][j];
	//			}
	//		}
	//		for(i=0;i<n;i++)
	//			b[i]=BMatrix[i][0];
	//		for(i=0;i<n;i++)
	//			for(j=1;j<m+1;j++)
	//			{
	//				matrix[i][j-1]=BMatrix[i][j];
	//			}
	//			CB[RowIndex]=Z[ColumnIndex];
	//}
	//for(i=0;i<n;i++)
	//	OptiValuble+=CB[i]*b[i];
	//printf("\n最优化的解为:%f\n",OptiValuble);
	for(i=0;i<n;i++)
		if(x[i]+1<m-n)
	       dishesamount[x[i]+1]=b[i]+0.3;	
	for(i=0;i<M-N;i++)
	if(dishesamount[i]==0)
	      dishesamount[i]=0.3;
	printf("\n%d道菜的合理含量如下:\n",M-N);
    for(i=0;i<M-N;i++)
	printf("菜号%d的含量为%f克\n",i+1,dishesamount[i]);
	return 0;
}

⌨️ 快捷键说明

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