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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ шифрование и расшифрование информации http://www.cyberforum.ru/cpp-beginners/thread681603.html
Написать программу шифрования, дешифрирования информации применяя различные алгоритмы: Виженера, Тритемия, ДифиХелмана, RSA и т. д
C++ Табличное преобразование символов Написать программу преобразования символов с помощью табличных кодировок. Согласовать программу для преобразования всех символов из одного вида в другой и выдать результат. http://www.cyberforum.ru/cpp-beginners/thread681602.html
C++ Определение текущей директории
Разработать программу для вывода текущего директория на экран. Определить атрибут очередной записи (файл или директорий) и вывести соответствующую запись разным шрифтом: если запись это файл – вывод делать строчными буквами, если запись директорий – вывод делать прописными буквами.
работа с файлами C++
Написать программу, открывающую файл, перемещающую указатель файла и чтение байтов текста в буфер с последующим выводом текста на экран. Приписать в конец файла заданную фразу, прочитать и вывести на экран содержимое файла. Прочитать блок, записать блок в указанное место.
C++ Поиск и чтение изображений из файла неизвестного формата http://www.cyberforum.ru/cpp-beginners/thread681594.html
Приветствую! Имеется файл http://ge.tt/3nctBLQ/v/0 Известно, что в нем содержатся изображения (как мне кажется, их 256 шт), довольно большого разрешения (скорее всего 1692*900 точек) Помогите определить, по какому принципу эти изображения хранятся в этом файле и как их оттуда достать
C++ NetBeans, MinGW и setlocale Скачал для пробы NetBeans 7.2. Установил компилятор MinGW. Тут же столкнулся с распространенной проблемой - отображением русских символов в консоли. В Dev-cpp эта проблема решалась с помощью setlocale(LC_ALL,"rus"); Здесь этот вариант не катит. В прикрепленном изображении: фраза "Здравствуй, мир!" до применения setlocale и после. Что посоветуете? подробнее

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

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

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

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

Вот код:
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 минут
Все! Нашел ошибку, зря поторопился выкладывать. (Минимальный эл-т не так задавал)
Тема закрыта.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru