0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
1

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

27.10.2012, 11:47. Показов 6568. Ответов 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 минут
Все! Нашел ошибку, зря поторопился выкладывать. (Минимальный эл-т не так задавал)
Тема закрыта.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2012, 11:47
Ответы с готовыми решениями:

Транспортная задача
Здравствуйте! Помогите пожалуйста составить задачу методом минимального элемента и методом...

Транспортная задача
Всем добрый день! Второй месяц не могу справиться, помогите пожалуйста. Очень нужна программа к...

Транспортная задача с промежуточными пунктами C++
Доброго времени суток,прошу прощение если умудрился закинуть тему не в тот раздел. Но просто задача...

Транспортная задача (методы приближения)
Всем доброго времени суток. Есть небольшая проблема с методами приближения, а именно с методом...

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

Транспортная задача (методом потенциалов)
В универе задали сделать транспортную задачу. Знания только одного семестра ОП. Сделал заполнение...

Транспортная задача (методом потенциалов)
Доброго времени суток форумчане! Нужна прога по вычислению транспортной задачи методом потенциалов....

Транспортная задача теорией графов
Возникла необходимость написать решение транспортной задачи, используя теорию графов. Одна поиски...

Транспортная задача, непонятная ошибка в коде!
Добрый день всем, есть вопрос, требующий срочного решения! Ниже приведен исходник программы,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru