给出运输问题的表上作业法的C示例代码
时间: 2024-04-30 17:20:09 浏览: 238
用matlab编写,实现了表上作业法解决运输问题
5星 · 资源好评率100%
运输问题(Transportation Problem)是线性规划中的一种经典问题,它的目标是求出使运输成本最小的运输方案。表上作业法(Northwest Corner Method)是一种求解运输问题的常用方法,它从左上角开始,依次填入运输量,直到满足总需求和总供给为止。下面是使用C语言实现表上作业法求解运输问题的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
int supply[MAX_SIZE]; // 生产商供给量
int demand[MAX_SIZE]; // 消费者需求量
int cost[MAX_SIZE][MAX_SIZE]; // 运输成本矩阵
int allocation[MAX_SIZE][MAX_SIZE]; // 运输方案矩阵
int main()
{
int m, n; // 生产商和消费者的个数
int i, j, k; // 循环计数器
int total_supply = 0, total_demand = 0; // 总供给和总需求量
int x, y; // 当前位置的行列坐标
int min; // 最小运输成本
int remain_supply, remain_demand; // 剩余供给和需求量
// 输入生产商和消费者的个数
printf("请输入生产商和消费者的个数(用空格分隔):");
scanf("%d %d", &m, &n);
// 输入生产商的供给量
printf("请输入每个生产商的供给量:");
for (i = 0; i < m; i++) {
scanf("%d", &supply[i]);
total_supply += supply[i];
}
// 输入消费者的需求量
printf("请输入每个消费者的需求量:");
for (j = 0; j < n; j++) {
scanf("%d", &demand[j]);
total_demand += demand[j];
}
// 输入运输成本矩阵
printf("请输入每个生产商到每个消费者的运输成本(用空格分隔):\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &cost[i][j]);
}
}
// 检查供给和需求是否相等
if (total_supply != total_demand) {
printf("供给量和需求量不相等,无法求解运输问题!\n");
return 0;
}
// 初始化运输方案矩阵
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
allocation[i][j] = 0;
}
}
// 开始求解运输问题
remain_supply = total_supply;
remain_demand = total_demand;
x = y = 0;
while (remain_supply > 0 && remain_demand > 0) {
if (supply[x] <= demand[y]) {
// 生产商供给量小于等于消费者需求量
allocation[x][y] = supply[x];
remain_supply -= supply[x];
remain_demand -= supply[x];
x++;
} else {
// 生产商供给量大于消费者需求量
allocation[x][y] = demand[y];
remain_supply -= demand[y];
remain_demand -= demand[y];
y++;
}
}
// 计算总运输成本
int total_cost = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
total_cost += allocation[i][j] * cost[i][j];
}
}
// 输出运输方案和总运输成本
printf("运输方案如下:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%d\t", allocation[i][j]);
}
printf("\n");
}
printf("总运输成本为:%d\n", total_cost);
return 0;
}
```
在上面的代码中,首先输入生产商和消费者的个数、供给量、需求量和运输成本矩阵。然后检查供给和需求是否相等,如果不相等则无法求解运输问题。接着使用表上作业法求解运输问题,并计算总运输成本。最后输出运输方案和总运输成本。
阅读全文