1.A107Դ?源码?
A107Դ??
帮你转帖过来了。
你那个空间也挺垃圾的源码东莞鸿源码头基础信息,连个上下滚动条都没有。源码tne源码
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
float matrix[][],源码sandbox源码x[]; /* 记录总方程的数组,解的数组 */
int a[]; /* 记录基础,非基础的解的情况,0:非基础,1:基础 */
int m,n,s,type; /* 方程变量,约束数,求最大最小值的类型,0:最小 1:最大 */
int indexe,indexl,indexg; /* 剩余变量,松弛变量,人工变量 */
void jckxj()
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<s;j++)
if(matrix[j]==1&&a[j]==1){
x[j]=matrix;
j=s;
}
for(i=0;i<s;i++)
if(a==0) x=0;
}
int rj()
{
int i;
for(i=0;i<s;i++)
if(fabs(matrix[n])>=0.)
if(matrix[n]<0) return 0;
return 1;
}
int min()
{
int i,temp=0;
float min=matrix[n][0];
for(i=1;i<s;i++)
if(min>matrix[n]){
min=matrix[n];
temp=i;
}
return temp;
}
void justartificial()
{
int i;
for(i=m+indexe+indexl;i<s;i++)
if(fabs(x)>=0.){
printf("no answern");
return;
}
}
int check(int in)
{
int i;
float max1=-1;
for(i=0;i<n;i++)
if(fabs(matrix[in])>=0.&&max1<matrix/matrix[in])
max1=matrix/matrix[in];
if(max1<0)
return 1;
return 0;
}
int searchout(int *temp,int in)
{
int i;
float min=;
for(i=0;i<n;i++)
if(fabs(matrix[in])>=0.&&(matrix/matrix[in]>=0)&&min>matrix/matrix[in]){
min=matrix/matrix[in];
*temp=i;
}
for(i=0;i<s;i++)
if(a==1&&matrix[*temp]==1) return i;
}
void mto(int in,int temp)
{
int i;
for(i=0;i<=s;i++)
if(i!=in)
matrix[temp]=matrix[temp]/matrix[temp][in];
matrix[temp][in]=1;
}
void be(int temp,int in)
{
int i,j;
float c;
for(i=0;i<=n;i++){
c=matrix[in]/matrix[temp][in];
if(i!=temp)
for(j=0;j<=s;j++)
matrix[j]=matrix[j]-matrix[temp][j]*c;
}
}
void achange(int in,int out)
{
int temp=a[in];
a[in]=a[out];
a[out]=temp;
}
void print()
{
int i,j,k,temp=0;
for(i=0;i<n;i++){
for(k=temp;k<s;k++)
if(a[k]==1){
printf("x%d ",k);
temp=k+1;
k=s;
}
for(j=0;j<=s;j++)
printf("%8.2f",matrix[j]);
printf("n");
}
printf("rj ");
for(j=0;j<=s;j++)
printf("%8.2f",matrix[n][j]);
printf("n");
}
void initprint()
{
int i;
printf("x");
for(i=0;i<s;i++)
printf(" a%d",i);
printf(" bn");
print();
printf("n");
}
void result()
{
int i;
printf(" (");
for(i=0;i<s;i++)
printf("%8.2f",x);
printf(" ) ");
if(type==1)
printf(" zmax=%fnn",matrix[n]);
else printf(" zmin=%fnn",matrix[n]);
}
void printresult()
{
if(type==0) printf("the minimal :%fn",-matrix[n]);
else printf("the maximum :%fn",matrix[n]);
}
void merge(float nget[][],float nlet[][],float net[][],float b[])
{
int i,j;
for(i=0;i<n;i++){
for(j=m;j<m+indexe;j++)
if(nget[j-m]!=-1) matrix[j]=0;
else matrix[j]=-1;
for(j=m+indexe;j<m+indexe+indexl;j++)
if(nlet[j-m-indexe]!=1) matrix[j]=0;
else matrix[j]=1;
for(j=m+indexe+indexl;j<s;j++)
if(net[j-m-indexe-indexl]!=1) matrix[j]=0;
else matrix[j]=1;
matrix=b;
}
for(i=m;i<m+indexe+indexl;i++)
matrix[n]=0;
for(i=m+indexe+indexl;i<s;i++)
matrix[n]=;
matrix[n]=0;
}
void processa()
{
int i;
for(i=0;i<m+indexe;i++)
a=0;
for(i=m+indexe;i<s;i++)
a=1;
}
void input(float b[],int code[])
{
int i=0,j=0;
printf("the equator variable and restrictorn"); /* 输入方程变量和约束数 */
cin>>m>>n;
for(i=0;i<n;i++){
printf("input b[] and restrictor code 0:<= 1:= 2:>=n"); /* 输入方程右边的值,code的值 */
cin>>b>>code;
printf("the xishun");
for(j=0;j<m;j++)
cin>>matrix[j]; /* 输入方程 */
}
printf("the type 0:min 1:max n"); /* 输入求最大值还是最小值 */
do{
cin>>type;
if(type!=0&&type!=1) printf("error,reinputn");
}while(type!=0&&type!=1);
printf("the zn"); /* 输入z */
for(i=0;i<m;i++)
cin>>matrix[n];
if(type==1)
for(i=0;i<m;i++)
matrix[n]=-matrix[n];
}
void xartificial()
{
int i,j,k;
if(indexg!=0){
for(i=m+indexe+indexl;i<s;i++){
for(j=0;j<n;j++)
if(matrix[j]==1){
for(k=0;k<=s;k++)
matrix[n][k]=matrix[n][k]-matrix[j][k]*;
j=n;
}
}
}
}
void process(float c[][],int row,int vol)
{
int i;
for(i=0;i<n;i++)
if(i!=row) c[vol]=0;
}
void sstart(float b[],int code[])
{
int i;
float nget[][],nlet[][],net[][]; /* 剩余变量数组,松弛变量数组,人工变量数组 */
indexe=indexl=indexg=0;
for(i=0;i<n;i++){
if(code==0){ nlet[indexl++]=1; process(nlet,i,indexl-1);}
if(code==1){ net[indexg++]=1; process(net,i,indexg-1); }
if(code==2){
net[indexg++]=1;
nget[indexe++]=-1;
process(net,i,indexg-1); process(nget,i,indexe-1);
}
}
s=indexe+indexl+indexg+m;
merge(nget,nlet,net,b); /* 合并 */
processa(); /* 初始化a[] */
initprint(); /* 初始化打印 */
xartificial(); /* 消去人工变量 */
}
void simplix() /* 单纯型算法 */
{
int in,out,temp=0;
while(1){
jckxj(); /* 基础可行解 */
print(); /* 打印 */
result(); /* 打印结果 */
if(!rj()) in=min(); /* 求换入基 */
else {
if(indexg!=0) justartificial(); /* 判断人工变量 */
printresult(); /* 打印最后结果 */
return;
}
if(check(in)){ /* 判断无界情况 */
printf("no delimitionn");
return;
}
out=searchout(&temp,in); /* 求换出基 */
mto(in,temp); /* 主元化1 */
be(temp,in); /* 初等变换 */
achange(in,out); /* 改变a[]的值 */
}
}
void main()
{
int code[]; /* 输入符号标记 */
float b[]; /* 方程右值 */
input(b,code); /* 初始化 */
sstart(b,code); /* 化标准型 */
simplix(); /* 单纯型算法 */
}