Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main.c
- * Author: Naik
- *
- * Created on September 20, 2014, 4:57 PM
- */
- #include <stdio.h>
- #include <stdlib.h>
- enum sum_type {COST, ITEMS, BALANCE};
- void logMatrix();
- int sumRow(int, enum sum_type);
- void assignNW();
- void assignFogel();
- typedef struct {
- int cost;
- int items;
- int potential;
- } Cell;
- int rows, cols;
- Cell **matrix;
- int *capacity, *demand;
- int balance;
- int main(int argc, char** argv) {
- printf("\t---ТРАНСПОРТНА ЗАДАЧА---\n\n");
- // Ввід даних
- printf("Введіть шлях до файлу даних:\n");
- char path[80];
- scanf("%s", path);
- FILE *file = fopen("/home/naik/data.txt", "r");
- if (file == NULL) {
- printf("Помилка шляху!\n");
- return EXIT_FAILURE;
- }
- fscanf(file, "rows=%d columns=%d", &rows, &cols);
- if (rows < 1 || cols < 1) return EXIT_FAILURE;
- matrix = (Cell**) malloc(rows * sizeof (Cell*));
- for (int i = 0; i < rows; i++) {
- matrix[i] = (Cell*) malloc(cols * sizeof (Cell));
- }
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- fscanf(file, "%d", &matrix[i][j].cost);
- }
- }
- capacity = (int*) malloc(rows * sizeof (int));
- demand = (int*) malloc(cols * sizeof (int));
- balance = 0;
- int b2 = 0;
- for (int i = 0; i < rows; i++) {
- fscanf(file, "%d", &capacity[i]);
- balance += capacity[i];
- }
- for (int i = 0; i < cols; i++) {
- fscanf(file, "%d", &demand[i]);
- b2 += demand[i];
- }
- fclose(file);
- if (balance != b2) {
- printf("Задача не збалансована!\n");
- } else {
- printf("Баланс=%d\n", balance);
- }
- printf("-----%d\n", sumRow(1, sum_type.COST));
- printf("Виберіть тип початкового розподілу матриці:\n 1 - північно-захадного кута\n 2 - метод Фогеля\n");
- int method = 0;
- scanf("%d", &method);
- if (method == 1) assignNW();
- else assignFogel();
- logMatrix();
- // Очищення пам’яті і завершення.
- printf("\n");
- for (int i = 0; i < rows; i++) {
- free(matrix[i]);
- }
- free(matrix);
- free(capacity);
- free(demand);
- return (EXIT_SUCCESS);
- }
- void assignNW() {
- printf("NW method\n");
- int cap, dem, j = 0, rest = 0;
- for (int i = 0; i < rows; i++) {
- cap = capacity[i];
- while (cap > 0) {
- dem = demand[j] - rest;
- cap -= dem;
- if (cap > 0) {
- matrix[i][j].items = dem;
- j++;
- rest = 0;
- }
- }
- rest = cap + dem;
- matrix[i][j].items = (rest);
- }
- }
- void assignFogel() {
- }
- int sumRow(int n, enum sum_type sumType) {
- int sum = 0;
- for (int i = 0; i < cols; i++)
- sum += matrix[n][i].items;
- return sum;
- }
- void logMatrix() {
- printf("\nlogMatrix\n");
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- printf("%d ", matrix[i][j].items);
- }
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement