资源简介
关于运输问题使用说明
1. 将单位运价表写入“in.txt”中,格式为:(拿书中P102页作业题为例)
#
3 4
10 2 20 11
12 7 9 20
2 14 16 18
15 25 5
5 15 15 10
其中,
第一行的‘#’表示一个问题的开始,是必须要的;
第二行中的3 4(中间用空格隔开,后面不能有空格)表示m和n,即单位运价表的行和列;
第三行到第五行
10 2 20 11
12 7 9 20
2 14 16 18
表示单位运价表;(中间用空格或TAB隔开)
第六行
15 25 5
表示三个产地的产量;
第七行
5 15 15 10
表示四个销地的销量;
2. 程序将会把最有运输方案写在“out.txt”中,(该文件将由程序自动产生);
3. 改程序能解决平衡运输问题和平衡分配问题;
下面是书中部分运输问题和分配问题测试用例:(写入in.txt中)
#
3 4
10 2 20 11
12 7 9 20
2 14 16 18
15 25 5
5 15 15 10
#
3 4
3 11 3 10
1 9 2 8
7 4 10 5
7 4 9
3 6 5 6
#
3 4
8 4 1 2
6 9 4 7
5 3 4 3
7 25 26
10 10 20 15
#
3 5
8 6 3 7 5
5 100 8 4 7
6 3 9 6 8
20 30 30
25 25 20 10 20
#
4 4
2 10 9 7
15 4 14 8
13 14 16 11
4 15 13 9
1 1 1 1
1 1 1 1
代码片段和文件信息
/******************************************************
***********本文件里的main()方法是主函数****************
*******************************************************/
#include “iostream“
#include “stdio.h“
#define maxsize 10000
#define maxsize_n 100
#define max 1000 //实际问题中出现的运费不能超过max,即max为最大运费
using namespace std;
typedef struct node
{
int x;
int y;
int pre; //pre表示指向它的前一结点
int flag; //flag表示搜索行(或列)的状态,取值为0、1其中1表示行搜索,0表示列搜索。
}sqtype;
FILE *fp1*fp2; //宏定义
sqtype sq[maxsize];
int circle[maxsize_n][maxsize_n]; //二维数组存储数据位
int flag[maxsize_n][maxsize_n]; //用于存储判断circle对应位置的状态,0为初始状态,1表示基变量所在位置,2表示在进行最小元素法时被划去。
int frontrear; //队列的头指针和为指针。
int base_array[maxsize_n][maxsize_n]; //base_array矩阵用于存储物品的调运方案
int mn;
typedef struct node1
{
int x; //x用于记录最小元素所在位置的行坐标
int y; //y用于记录最小元素所在位置的列坐标
int min_flag; //min_flag用于记录最小元素所在位置的状态,既将flag数组里的元素赋给min_flag
}min_num;
/******************************************************
*本文件里的min_method()方法是利用最小元素法确定初始基 *
*******************************************************/
void min_method(int mint n)
{
int ijk;
min_num temp_mintemp_min1;
for (i=1;i<=m;i++) //初始化
{
for (j=1;j<=n;j++)
{
base_array[i][j]=0;
flag[i][j]=0; //标记每个位置的元素都没有被处理
}
}
for (k=1;k<=m+n-1;k++) //最多循环m+n-1次,因为基变量的个数为m+n-1;
{
temp_min.min_flag=max;
temp_min.x=0;
temp_min.y=0;
//下面的两重循环的作用是找到没有处理元素中的最小元素
for (i=1;i<=m;i++)
{
for (j=1;j<=n;j++)
{
if ( (flag[i][j]==0) && (circle[i][j] {
temp_min.x=i;
temp_min.y=j;
temp_min.min_flag=circle[i][j];
}
}
}
//下面对前面找到的最小元素所在的行或列进行处理
if (circle[temp_min.x][n+1]>circle[m+1][temp_min.y]) //该最小元素所在位置的行元素(销量)比行元素(产量)大
{
for (i=1;i<=m;i++)
{
if (flag[i][temp_min.y]==0) //表示该位置没有被处理
{
flag[i][temp_min.y]=2; //标记该列的所有元素划去
}
}
flag[temp_min.x][temp_min.y]=1; //标记最小元素所在位置为基变量所在位置
base_array[temp_min.x][temp_min.y]=circle[m
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8896 2011-06-01 20:02 运输问题\function\close_loop.h
文件 2160 2011-06-01 20:02 运输问题\function\close_method.h
文件 315 2011-06-03 17:43 运输问题\function\in.txt
文件 1221 2011-06-01 21:42 运输问题\function\main.cpp
文件 5354 2011-06-01 20:02 运输问题\function\min_method.h
文件 1967 2011-06-01 20:04 运输问题\function\myread.h
文件 1033 2011-06-02 08:47 运输问题\function\my_define.h
文件 315 2011-06-03 17:43 运输问题\in.txt
文件 315 2011-06-03 17:43 运输问题\my_method\in.txt
文件 20915 2011-06-05 21:57 运输问题\my_method\my_transport_problem.cpp
文件 600036 2011-06-05 21:57 运输问题\my_method\my_transport_problem.exe
文件 349 2011-06-05 21:57 运输问题\my_method\out.txt
文件 23 2011-06-05 21:57 运输问题\my_method\temp_close.txt
文件 349 2011-06-05 21:57 运输问题\out.txt
文件 315 2011-06-03 17:43 运输问题\rear_one\in.txt
文件 33 2011-06-03 18:01 运输问题\rear_one\out.txt
文件 33 2011-06-03 18:01 运输问题\rear_one\temp_close.txt
文件 19506 2011-06-05 21:51 运输问题\rear_one\transport_problem.cpp
文件 598864 2011-06-03 18:00 运输问题\rear_one\transport_problem.exe
文件 24348 2011-06-03 17:59 运输问题\rear_one\wl.cpp
文件 598874 2011-06-03 17:59 运输问题\rear_one\wl.exe
文件 23 2011-06-05 21:57 运输问题\temp_close.txt
文件 20484 2011-06-05 21:57 运输问题\transport_problem1.cpp
文件 599491 2011-06-05 21:57 运输问题\transport_problem1.exe
文件 30208 2011-06-04 23:19 运输问题\说明.doc
目录 0 2011-06-05 21:57 运输问题\function
目录 0 2011-06-05 21:57 运输问题\my_method
目录 0 2011-06-05 21:57 运输问题\rear_one
目录 0 2011-06-05 21:57 运输问题
----------- --------- ---------- ----- ----
............此处省略2个文件信息
- 上一篇:商人过河问题的MATLAB程序
- 下一篇:C语言读取、存储、显示BMP图像
评论
共有 条评论