Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 29.01.2012
Сообщений: 27

Транспортная задача. Метод минимального элемента

20.04.2015, 18:57. Показов 1313. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, дорогие форумчане!
Программирую алгоритм транспортной задачи методом минимального элемента, чтобы получить первый опорный план и перейти к методу потенциалов.
Столкнулся с проблемой:
Никак не могу понять, почему не ищутся правильно индексы минимального элемента. Они (инлдексы0 вначале находят правильный элемент, а потом идут на (0;0), и всегда (0;0), хотя функция по их поиску работает правильно.
Вот код:
PHP
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
// Матрица тарифов
$c = array(
        array(2,5,2),
        array(4,1,5),
        array(3,6,8)
        );
 
// Запасы груза
$m = array(90,400,110);
 
// Потребности в грузе
$n = array(140,300,160);
 
 
function MinTarif($c,$m, $n)
    {
        
        $X = array();
        
      
       
        for ($i=0; $i < count($m); $i++) { 
            for ($j=0; $j < count($n); $j++) { 
                $X[$i][$j]=-1;
            }
        }
        
        $k=0;
        $t=0; 
                
     
                    for ($i=0; $i < count($c); $i++)
                        {
                            for ($j=0; $j < count($c[0]); $j++)
                                {
 
                                    $k = getIndexi($c);
                                    $t = getIndexj($c);
 
                                        $minPost = min($m[$k],$n[$t]); // Минимальная поставка в строке или столбце
    
                                        $X[$k][$t] = $minPost; // Загружаем поставку
                                                            
 
                                        if($minPost == $m[$k]) { $n[$t] -= $m[$k]; $m[$k]=0; $c = ZamenaStroki($c,$k); }
 
                                        if($minPost == $n[$t]) { $m[$k] -= $n[$t]; $n[$t]=0; $c = ZamenaStolbca($c,$t); }
                              }
                  
                        }
 
        return $X;
 
    }
В функции я передаю матрицу тарифов $c, массив с запасами груза $n, и массив с потребностями $n.
Результат, соответственно, я записываю в Матрицу поставок $X.
Иду по матрице тарифов, ищу и запоминаю индексы минимального элемента с помощью функции getIndexi() и getIndexj() соответственно.
Вот эти функции:
PHP
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
function getMin($arr)
     {
        static $res = array();
 
        foreach ($arr as $k => $v) {
            if(is_array($v))
                getMin($v);
            else{
                if($v != 0)
                    $res[] = $v;
            }
        }
        return !empty($res) ? min($res) : 0;
     }
       
 
    function getIndexi($ab)
    {
        $k=0;
        for ($i=0; $i < count($ab); $i++) { 
            for ($j=0; $j < count($ab[0]); $j++) { 
                if($ab[$i][$j] == getMin($ab))
                    $k = $i;
            }
        }
        return $k;
    }
 
    function getIndexj($ab)
    {
        $t=0;
        for ($i=0; $i < count($ab); $i++) { 
            for ($j=0; $j < count($ab[0]); $j++) { 
                if($ab[$i][$j] == getMin($ab))
                    $t = $j;
            }
        }
        return $t;
    }
Функция getMin() возвращает минимальный элемент двумерного массива. Причем пропуская нули. То есть если в матрице есть нули, то функция работает как continue в цикле for. (P. S. я писал функцию поиска мин элемента в двумерном массиве сам, она пропускала нули, но если первый элемент матрицы был бы 0, она брала его за минимум, так как я стартовал с первого элемента, но не суть).

Далее в самой MinTarif() я ищу минимальную поставку в массивах $m и $n, и записываю её в матрицу погрузок $X. После этого я проверяю, какая была поставка минимальна и, в соответствии с этим, зануляю элементы массива, а так же заменю нулями строку или столбец матрицы $c (в зависимости, чьи потребности были удовлетворены) функциями ZamenaStroki() и ZamenaStolbca() соответственно.
Вот они:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function ZamenaStroki($c, $stroka)
    {
        for ($i=0; $i < count($c[0]); $i++) { 
                $c[$stroka][$i] = 0;
        }
        
        return $c;
    }
 
 
    function ZamenaStolbca($c,$stolbec)
    {
        for ($i=0; $i < count($c); $i++) 
        {
            $c[$i][$stolbec] = 0;
        }
        return $c;
    }
Проблема вот в чем: первый элемент ищется нормально. Всё зануляется, всё работает. А дальше, индексы минимального элемента принимается (0;0), т.е. первый элемент. И всегда последующий становится первым элементом...
Возможно проблема в цикле или ещё в чём-то. Если можете, подскажжите, пожалуйста. Заранее спасибо!
======================================== ======
Кратко о методе минимального элемента в транспортной задаче:
В матрице тарифов ищется минимальный элемент запоминаются его индексы $k, $t. Затем в матрицу погрузок вносится минимальный элемент из массивов запасов и потребностей min($m[$k],$n[$t]). В массиве $m[k] (или $n[$t]) этот минимальный элемент зануляется путём вычитания из него большего, а матрице тарифов вычёркивается строка (или столбец), считая, что потребности поставщика (или получателя) удовлетворены, т.е.$m[k]=0 (или $n[k]=0). И далее идёт до тех пор, пока не будут удовлетворены все потребности, т.е. массив $m и $n должны быть будут пустыми.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2015, 18:57
Ответы с готовыми решениями:

Транспортная задача: метод минимального элемента
Всем доброго времени суток. Помогите пожалуйста решить транспортную задачу методом минимальной стоимости. Неважно в Console или Windows...

Транспортная задача(метод минимального элемента)
Здравствуйте! Нужно написать задачу, которая методом минимального элемента составит опорный план для транспортной задачи. Не получается...

Транспортная задача. Метод минимального элемента
Доброго времени суток, форумчане. Пишу курсовой на тему &quot;Методы решения транспортной задачи&quot;. Есть пару проблем с методом минимального...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2015, 18:57
Помогаю со студенческими работами здесь

Транспортная задача. Метод северо-западного угла и метод минимального элемента.
Метод северо-западного угла и метод минимального элемента. Задание: Найти опорный план следующих транспортных задач по методу...

транспортная задача методом минимального элемента
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,...

Транспортная задача: метод северо-западного угла + метод оптимизации (потенциалов)
есть у кого-нибудь исходники на программу решения злп метод с-з угла + метод оптимизации(потенциалов)?помогите пожалуйста

Транспортная Задача Делфи (метод с-з угла + метод оптимизации(потенциалов)
Ребят, столкнулся с такой проблемой: Курсовая работа &quot;Компьютерная модель решения ТЗ&quot; необходима программа, с любыми условиями,...

Транспортная задача. Метод потенциалов
Необходимо запрограммировать решение транспортной задачи методом потенциалов. Опорный план находится методом северо-западного угла. Я не...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru