资源简介
运输问题标准形式的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++继承,剪刀石头布
- 校园失物招领管理系统.rar
- 清华 严蔚敏《数据结构》的全部代码
- DES加密算法C语言版源代码
- 卡尔曼滤波算法航迹预测.rar
- C++Builder6.0破解版安装包
- 简单文本编辑器C++
- 图灵机用作转换器计算x的y次幂,含
- C++实现的高斯投影正算和反算
- C++用类读取和处理TXT文件数据
- Qt5 串口助手源代码
- C++实现7.4汉明码编码
- C++实现DNS劫持
- 页面置换算法OPT、FIFO、LRU实现--C++版
- 面向对象程序设计风格的五子棋程序
- C++期末复习 程序填空题 1
- c++ 计算器 能实现带括号的小数计算
- C++课程设计——停车场管理
- linux C与C++混合编程通用makefile
- C++教程完整
- matlab的smooth()函数c++实现
- C++入门经典(第9版) ([美]Walter Sa
- 扫雷小游戏,c++版本
- 利用指针数组冒泡法排序
- dijkstra算法C++实现
- C++test v6.0.0.5破解版3
- 操作系统 C++ 页面置换算法含实验报告
- TelBook.cpp通讯录课程设计
- 声卡数据采集播放演示源程序vc.zip
- 向量类的设计与实现 VC++6.0
评论
共有 条评论