Форум программистов, компьютерный форум CyberForum.ru

Транспортная задача - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Andrew_ku
0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
27.10.2012, 11:47     Транспортная задача #1
Всем привет) Пишу решение транспортной задачи по методу минимального элемента.
Сейчас нахожусь на стадии заполнения матрицы перевозок. Но она не хочет заполнятся, т.е как буд-то происходит только одно действие в цикле и то не полностью.

Делаю так: Есть две матрицы. В одной запасы поставщика и потребителя в нулевых строках и столбцах соответственно,в других будут находится кол-во поставок( но не во всех). В другой матрице такой же структуры находятся стоимости перевозок от соответствующего посавщика к соответ. потребителю.

На данном этапе делаю так: Нахожу минимальный элемент в матрице стоимости, запоминаю соответсвующие мин-му эл-ту номер строки и солбца. В матрице поставок, используя эти номера строки и столбца нахожу мин-й элемент из запаса поставщика и запроса потребителя. Мин-й из них вычитаю из каждого и записываю этот же мин-й элемент на пересечение этого поставщика с этим потребителем. И ввожу ограничения поиска следующего мин-го элемента в матрице стоимости. И все это заного.

Но у меня почему-то только один раз вычитает и даже не записывает вычитаемое на пересечение.

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include<time.h>
#include <windows.h>
using namespace std;
const int m=5;
const int n=4;
void ShowMatrix(int mat[m][n],int m,int n,int k,int l)
{
    for(int i=k;i<m;i++)
    {  
        for( int j=l ;j<n;j++)
        cout<<mat[i][j]<<"\t";      
        cout<<endl;
    }
    cout<<endl;
}
 
int main(int argc, _TCHAR* argv[])
{
     // Основная матрица поставок
    int mat[m][n]={     
        {0,40,20,40},
        {30,0,0,0},
        {25,0,0,0},
        {15,0,0,0},
        {30,0,0,0},
    };
    // Матрица для стоимости перевозок
    int matStoim[m][n]={     
        {0,0,0,0},
        {0,2,6,4},
        {0,4,3,5},
        {0,3,1,5},
        {0,5,2,5},
    };
     // Матрица для оценок
        int matOtsenok[m][n]={     
        {0,0,0,0},
        {0,0,0,0},
        {0,0,0,0},
        {0,0,0,0},
        {0,0,0,0},
    };
    ShowMatrix(mat,m,n,0,0);
    ShowMatrix(matStoim,m,n,1,1);
    //////////////////////////////////////////////
    int temp=matStoim[1][1],i_m,j_m;
    int ogr_i[4]={0,0,0,0};
    int ogr_j[3]={0,0,0};
    int c_i=0; //Счетчик для массива ограничений по i
    int c_j=0; //Счетчик для массива ограничений по j
    
    for(int k=0;k<7;k++)
    {
    for(int i=1;i<m;i++)
    {
        if(i==ogr_i[0] || i==ogr_i[1] || i==ogr_i[2] || i==ogr_i[3])
        { continue;}
        for(int j=1;j<n;j++)
        {
            if(j==ogr_j[0] || j==ogr_j[1] || j==ogr_j[2])
            continue;
            if(matStoim[i][j]<temp)
            {temp=matStoim[i][j];i_m=i;j_m=j;}
        }
    }
     if(mat[0][j_m]<mat[i_m][0])
     {
         mat[i_m][j_m]=mat[0][j_m];
        mat[i_m][0]=mat[i_m][0]-mat[0][j_m];
        mat[0][j_m]=0;
        ogr_j[c_j]=j_m;
        c_j++;
     } 
 
     if(mat[i_m][0]<mat[0][j_m])
     {
        mat[i_m][j_m]=mat[i_m][0];
        mat[0][j_m]=mat[0][j_m]-mat[i_m][0];
        mat[i_m][0]=0;
        ogr_i[c_i]=i_m;
        c_i++;
     }
     if(mat[0][j_m]==mat[i_m][0])
     {
         mat[i_m][j_m]=mat[i_m][0];
         mat[0][j_m]=0; 
         mat[i_m][0]=0;
         ogr_j[c_j]=j_m;
         c_j++;
         ogr_i[c_i]=i_m;
         c_i++;
     } 
    
    }
    
      ShowMatrix(mat,m,n,0,0);
getch();
return 0;
}
Добавлено через 15 минут
Все! Нашел ошибку, зря поторопился выкладывать. (Минимальный эл-т не так задавал)
Тема закрыта.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 11:47     Транспортная задача
Посмотрите здесь:

C++ Транспортная задача
Транспортная задача(метод минимального элемента) C++
C++ Транспортная задача с промежуточными пунктами C++
C++ Транспортная задача
C++ Транспортная задача (методы приближения)
Транспортная задача (методом потенциалов) C++
Транспортная задача, непонятная ошибка в коде! C++
Транспортная задача (методом потенциалов) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zhumadilov
2 / 2 / 0
Регистрация: 22.10.2009
Сообщений: 97
27.11.2012, 09:07     Транспортная задача #2
[QUOTE=Andrew_ku;3616139]Всем привет) Пишу решение транспортной задачи по методу минимального элемента.
Сейчас нахожусь на стадии заполнения матрицы перевозок. Но она не хочет заполнятся, т.е как буд-то происходит только одно действие в цикле и то не полностью.
зДАРОВА МОЖЕШЬ СКИНУТЬ ПРОГУ ПЛИЗ
Yandex
Объявления
27.11.2012, 09:07     Транспортная задача
Ответ Создать тему
Опции темы

Текущее время: 17:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru