Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 2
1

1C Транспортная Задача

25.09.2018, 08:12. Показов 765. Ответов 2
Метки нет (Все метки)

Доброго времени суток.Я пишу программу для нахождения минимальной стоимости перевозки методом потенциалов на языке C#.
У меня возникли трудности с нахождением цикла для перераспределения потенциалов. Нашел готовое решение на языке 1C, но в одном месте я не понимаю откуда берется j0/i0 и i1/j1.

Вот ссылка на полную программу https://kb.mista.ru/article.php?id=859

Тут часть кода где появляются j0,i0,j1,i1:
1C
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
//Поиск цикла для перераспределения поставок. 
//Заполняет массивы iЦикл и jЦикл с координатами вершин цикла.
//Возвращает Истина, если цикл найден и Ложь, если не удалось найти цикл.
Функция НайтиЦикл(i0, j0)
    гл_сч = m*n; // максимальное число итераций
    iЦикл.Очистить();
    jЦикл.Очистить();
    Если НайтиЦикл_ПоГоризонтали(i0, j0) Тогда
        Возврат Истина; //Цикл найден успешно
    КонецЕсли;
    Возврат Ложь;//Цикл не найден
КонецФункции
 
Функция НайтиЦикл_ПоГоризонтали(i0, j0)
    гл_сч=гл_сч-1;
    Если гл_сч=0 Тогда
        ВызватьИсключение("Слишком большое число итераций при поиске цикла");
    КонецЕсли;    
    Для j=1 по n Цикл
        Если j=j0 Тогда
            Продолжить;
        КонецЕсли;
        Если БазисныеЯчейки[i0][j]=0 Тогда
            Продолжить;
        КонецЕсли;
        Если НайтиЦикл_ПоВертикали(i0, j) Тогда
            iЦикл.Добавить(i0);
            jЦикл.Добавить(j);
            Возврат Истина;
        КонецЕсли;    
    КонецЦикла;
    Возврат Ложь; // Не найден цикл
КонецФункции    
 
Функция НайтиЦикл_ПоВертикали(i0, j0)
    Для i=1 по m Цикл
        Если (j0=j1) и (i=i1) Тогда
            //Попали в начальную точку цикла
                iЦикл.Добавить(i);
                jЦикл.Добавить(j0);
                Возврат Истина; //Цикл завершен
        КонецЕсли;    
        Если i=i0 Тогда
            Продолжить;
        КонецЕсли;
        Если БазисныеЯчейки[i][j0]=0 Тогда
            Продолжить;
        КонецЕсли;
        Если НайтиЦикл_ПоГоризонтали(i, j0) Тогда
            iЦикл.Добавить(i);
            jЦикл.Добавить(j0);
            Возврат Истина;
        КонецЕсли;    
    КонецЦикла;    
    Возврат Ложь; // Не найден цикл
КонецФункции
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2018, 08:12
Ответы с готовыми решениями:

Задача линейного программирования, транспортная задача
Всем привет. сижу на экзамене, помогите пожалуйста решить,сроно!!! заранее спасибо.

Транспортная задача
Добрый вечер! Помогите найти ошибку Вот альтернативный вариант(тоже почему-то не работает)

Транспортная задача
Появилась необходимость решить данную задачу с помощью Scilab Что должно включать в себя...

Транспортная задача
Доброго времени суток. Просьба помочь разобраться. Есть транспортная задача Четыре...

2
758 / 567 / 149
Регистрация: 22.04.2013
Сообщений: 4,093
Записей в блоге: 1
25.09.2018, 12:16 2
перем i1, j1; //Ячейка начала цикла пересчета

и0 и жы0 - переменные, поступившие в качестве параметров в функцию
1
23 / 18 / 6
Регистрация: 10.11.2016
Сообщений: 48
04.11.2018, 06:24 3
Это глобальные переменные
1C
1
перем i1, j1; //Ячейка начала цикла пересчета
и потом присваивается значение:

1C
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
//По известным потенциалам u и v, а также ценам, вычисляет
//оптимальное ли решение (возвращает Истина или Ложь).
//Если решение не оптимально, находит ячейку i1,j1 с минимальной отрицательной дельтой,
//откуда будем строить цикл.
Функция ПроверкаОптимальности()
    перем чРешениеОптимально, чМинимальнаяДельта, i, j, Дельта;
    чРешениеОптимально=Истина;
    чМинимальнаяДельта=НеОпределено;
    Для i=1 по m Цикл
        стр="Дельта=";
        Для j=1 по n Цикл
            Если БазисныеЯчейки[i][j]=1 Тогда
                Дельта=0;
            Иначе
                Дельта = Цены[i][j]-u[i]-v[j];
            КонецЕсли;    
            
            стр=стр+Дельта+" ";
            Если Дельта<0 Тогда
                чРешениеОптимально=Ложь;
            КонецЕсли;
            Если чМинимальнаяДельта=НеОпределено Тогда
                чМинимальнаяДельта=Дельта;
                i1=i; // <--- переменная раз 
                j1=j; // <--- и два
            Иначе
                Если Дельта<чМинимальнаяДельта Тогда
                    чМинимальнаяДельта=Дельта;
                    i1=i; // <--- переменная раз
                    j1=j; // <--- и два
                КонецЕсли;        
            КонецЕсли;    
        КонецЦикла;    
        //Сообщить(стр);
    КонецЦикла;
    Возврат чРешениеОптимально;
КонецФункции
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2018, 06:24

Транспортная задача
Помогите в решении транспортной задачи. Условие в прикрепленном файле. Заранее спасибо!

Транспортная задача
Помогите пожалуйста решить

Транспортная задача
Поставщики товара – оптовые коммерческие предприятия имеют запасы товаров соответственно в...

Транспортная задача
помогите найти ошибку program transport; uses crt; const n=3; const m=4; var i,j:integer;...


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

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

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