资源简介
运输问题标准形式的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;
- 上一篇:51单片机_GPS程序
- 下一篇:C++继承,剪刀石头布
相关资源
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C流程图生成器,用C语言代码 生成C语
- C++纯文字DOS超小RPG游戏
- 小甲鱼C语言课件 源代码
- 学校超市选址问题(数据结构C语言版
- VC++MFC小游戏实例教程(实例)+MFC类库
- c语言看发的网络协议 ,源代码
- LU分解法解线性方程组的C语言代码
- 手机话费管理系统(c语言编写)
- C语言实现的DES对称加密算法
- 数据结构,迷宫问题C语言版源代码
- C语言 学生信息管理系统 源代码
- C语言版3D魔方游戏源代码
- 编译原理实验-词法分析(c语言代码)
- C语言中 文件读取和写入的详细操作代
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
评论
共有 条评论