Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2014
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.21 KB | None | 0 0
  1. /*
  2.  * File:   main.c
  3.  * Author: Naik
  4.  *
  5.  * Created on September 20, 2014, 4:57 PM
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. enum sum_type {COST, ITEMS, BALANCE};
  12.  
  13. void logMatrix();
  14. int sumRow(int, enum sum_type);
  15. void assignNW();
  16. void assignFogel();
  17.  
  18. typedef struct {
  19.     int cost;
  20.     int items;
  21.     int potential;
  22. } Cell;
  23.  
  24. int rows, cols;
  25. Cell **matrix;
  26. int *capacity, *demand;
  27. int balance;
  28.  
  29. int main(int argc, char** argv) {
  30.     printf("\t---ТРАНСПОРТНА ЗАДАЧА---\n\n");
  31.     // Ввід даних
  32.     printf("Введіть шлях до файлу даних:\n");
  33.     char path[80];
  34.     scanf("%s", path);
  35.     FILE *file = fopen("/home/naik/data.txt", "r");
  36.     if (file == NULL) {
  37.         printf("Помилка шляху!\n");
  38.         return EXIT_FAILURE;
  39.     }
  40.     fscanf(file, "rows=%d columns=%d", &rows, &cols);
  41.     if (rows < 1 || cols < 1) return EXIT_FAILURE;
  42.  
  43.     matrix = (Cell**) malloc(rows * sizeof (Cell*));
  44.     for (int i = 0; i < rows; i++) {
  45.         matrix[i] = (Cell*) malloc(cols * sizeof (Cell));
  46.     }
  47.  
  48.  
  49.     for (int i = 0; i < rows; i++) {
  50.         for (int j = 0; j < cols; j++) {
  51.             fscanf(file, "%d", &matrix[i][j].cost);
  52.         }
  53.     }
  54.  
  55.     capacity = (int*) malloc(rows * sizeof (int));
  56.     demand = (int*) malloc(cols * sizeof (int));
  57.  
  58.     balance = 0;
  59.     int b2 = 0;
  60.     for (int i = 0; i < rows; i++) {
  61.         fscanf(file, "%d", &capacity[i]);
  62.         balance += capacity[i];
  63.     }
  64.     for (int i = 0; i < cols; i++) {
  65.         fscanf(file, "%d", &demand[i]);
  66.         b2 += demand[i];
  67.     }
  68.  
  69.     fclose(file);
  70.  
  71.     if (balance != b2) {
  72.         printf("Задача не збалансована!\n");
  73.     } else {
  74.         printf("Баланс=%d\n", balance);
  75.     }
  76.     printf("-----%d\n", sumRow(1, sum_type.COST));
  77.     printf("Виберіть тип початкового розподілу матриці:\n 1 - північно-захадного кута\n 2 - метод Фогеля\n");
  78.     int method = 0;
  79.     scanf("%d", &method);
  80.     if (method == 1) assignNW();
  81.     else assignFogel();
  82.  
  83.     logMatrix();
  84.  
  85.     // Очищення пам’яті і завершення.
  86.     printf("\n");
  87.     for (int i = 0; i < rows; i++) {
  88.         free(matrix[i]);
  89.     }
  90.     free(matrix);
  91.     free(capacity);
  92.     free(demand);
  93.     return (EXIT_SUCCESS);
  94. }
  95.  
  96. void assignNW() {
  97.     printf("NW method\n");
  98.     int cap, dem, j = 0, rest = 0;
  99.     for (int i = 0; i < rows; i++) {
  100.         cap = capacity[i];
  101.         while (cap > 0) {
  102.             dem = demand[j] - rest;
  103.             cap -= dem;
  104.             if (cap > 0) {
  105.                 matrix[i][j].items = dem;
  106.                 j++;
  107.                 rest = 0;
  108.             }
  109.         }
  110.         rest = cap + dem;
  111.         matrix[i][j].items = (rest);
  112.     }
  113. }
  114.  
  115. void assignFogel() {
  116.  
  117. }
  118.  
  119. int sumRow(int n, enum sum_type sumType) {
  120.     int sum = 0;
  121.     for (int i = 0; i < cols; i++)
  122.         sum += matrix[n][i].items;
  123.     return sum;
  124. }
  125.  
  126. void logMatrix() {
  127.     printf("\nlogMatrix\n");
  128.     for (int i = 0; i < rows; i++) {
  129.         for (int j = 0; j < cols; j++) {
  130.             printf("%d ", matrix[i][j].items);
  131.         }
  132.         printf("\n");
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement