• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: C++  代码  

资源简介

运输问题标准形式的c++代码求解,基本思路是用表上作业法求解。

资源截图

代码片段和文件信息

#include
#include
#include
#include 
void input();
void find();
void exchange();
void ud(int a0 int b0 int a int b int d);
void lr(int a0 int b0 int a int b int d);
void left(int aint b double min);
void up(int aint b double min);

void output();
void turn();
void reverse();
void initilize();
void turnup();
void output();

void calculate();
bool check2();
bool check3();
bool judge();
bool judge1();
bool flag;

int b0a0;//初始列值
int m;
int n;
int direction=1;
double Matrix[100][100]={0};
double A[100][100]={0};//结果输出矩阵
double u[100]={0};
double v[100]={0};
double sigma[100][100]={0};
int S[100][100]={0};//确定为基变量

int M[100][100]={0};//存储闭合回路路线折点的数组




void insert();//    find()
bool check1();

int main()
{
input();
find();
calculate();//用位势法计算检验数的值
while(judge()==false)//判定是否有检验数小于零
{
exchange();
calculate();
}
output();
return 0;
}



void input()                                 //                                   正确
{
cout<<“请输入矩阵的行“< cin>>m;
cout<<“请输入矩阵的列“< cin>>n;
cout<<“请输入矩阵的系数“< for (int i=0; i<=m; i++)
{
for(int j=0; j<=n; j++)
cin>>Matrix[i][j];
}
for (i=1; i<=m; i++)
A[i][0]=Matrix[i][0];
for (int j=1; j<=n; j++)
A[0][j]=Matrix[0][j];
}


void find()//寻找基变量                                                           正确
{
while (check1()==false)//产销都为零
{
insert();//插入一个基变量
}
}
bool check1()//产销都为零
{
bool k=true;
for (int i=1; i<=m; i++)
{
if (A[i][0]!=0)
k=false;
}
for (int j=1; j<=n; j++)
{
if (A[0][j]!=0)
k=false;
}
return k;
}
void insert()//插入一个基变量
{
double min;
for (int a=1 b=1; a<=m b<=n; )
{
min=A[0][b];
if (A[a][0] {
min=A[a][0];
A[0][b]-=min;
A[a][0]-=min;
A[a][b]=min;
S[a][b]=1;
a++;
}
else
{
A[0][b]-=min;
A[a][0]-=min;
A[a][b]=min;
S[a][b]=1;
b++;
}
}
}

void calculate()                                 //                                   正确
{
for (int i=1; i<=m; i++)
u[i]=-10000;
for (int j=1; j<=n; j++)
v[j]=-10000;
u[1]=0;
while (check2()==false)//确定U V里面没有-10000
{
for (i=1; i<=m; i++)
{
for (j=1; j<=n; j++)
{
if (S[i][j]==1)//确定为基变量
{
if (u[i]==-10000&&v[j]!=-10000)
u[i]=Matrix[i][j]-v[j];
if (u[i]!=-10000&&v[j]==-10000)
v[j]=Matrix[i][j]-u[i];
}
}
}
}
for (i=1; i<=m; i++)
{
for (j=1; j<=n; j++)
{
sigma[i][j]=Matrix[i][j]-u[i]-v[j];
}
}
}
bool check2()
{
for (int i=1; i<=m; i++)
if (u[i]==-10000)
return false;
for (int j=1; j<=n; j++)
if (v[j]==-10000)
return false;
return true;
}

bool judge()
{
for (int i=1; i<=m; i++)
{
for (int j=1; j<=n; j++)
{
if (sigma[i][j]<0)
return false;
}
}
return true;
}

void exchange()//找到闭合回路进行基变量转换
{
output();
double min=0;

评论

共有 条评论