Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2012, 10:17   #1
kipa001
Новичок
Джуниор
 
Регистрация: 11.06.2012
Сообщений: 1
Печаль Не работает...

Программа решения задачи коммивояжера методом полного перебора, она компилируется, но почему то выдает пустое консольное окно.....помогите разобраться пожалуйста, в чем ошибка?


Код:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
 
template <class data>
class MatrixBase
{
    typedef short int shint;
    typedef unsigned int uint;
    typedef std::vector <data> vectorT;
    typedef std::vector <vectorT> matrixT;
    typedef std::vector <shint> vectorIndexT;
    typedef std::pair <int, int> VerticesPair;
    typedef std::vector <VerticesPair> EdgesVector;
 
    public:
 
        // признаки данных
        data nullAttr, infinityAttr;
 
        // конструктор
        MatrixBase (uint c, data nil = 0, data inf = -1) : nullAttr(nil), infinityAttr(inf)
        {
            __matrix.resize(c);
            for (uint i = 0; i < c; i++) {
                __matrix[i].resize(c);
                for (uint j = 0; j < c; __matrix[i][j++] = infinityAttr);
            }
        }
        // перегрузка операторов для сохранения тождественности объекта и матрицы
        vectorT & operator [] (uint index) { return __matrix[index]; }
        matrixT & operator () () { return __matrix; }
}
// метод прямого перебора (грубой силы)
        vectorIndexT TSP_BruteForce (int start = -1)
        {
            // длина обхода
            data length = nullAttr;
            // вектор индексов перебора, результирующий вектор индексов
            vectorIndexT index (__matrix.size(), 0), out (__matrix.size(), 0);
            for (uint i = 0; i < index.size(); i++, index[i] = i);
            // сортировка для пермутаций
            sort (index.begin(), index.end());
            // ключ выбора начального элемента
            bool any = (start <= -1);
            do {
                if ((index[0] == (shint)start) || (any)) {
                    // контур непрерывен
                    bool solid = true;
                    // аккумулятор значения
                    data acc = __matrix[index[index.size()-1]][index[0]];
                    for (uint i = 0; i < index.size() - 1; i++) {
                        // буферная переменная
                        data buffer = __matrix[index[i]][index[i+1]];
                        // проверка на непрерывность контура
                        if ((acc == infinityAttr) || (buffer == infinityAttr)) {
                            // контур прервался
                            solid = false;
                            break;
                        }
                        acc += buffer;
                    }
                    // предварительная проверка контура
                    if ((solid) && ((length == nullAttr) || (acc < length))) {
                        // длина обхода
                        length = acc;
                        // перезапись результата
                        out = index;
                    }
                }
            }
            // производим пермутацию (перестановку)
            while (next_permutation(index.begin(), index.end()));
            return out;
        }

Последний раз редактировалось ACE Valery; 11.06.2012 в 13:16.
kipa001 вне форума Ответить с цитированием
Старый 11.06.2012, 16:34   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

А Вы где-нибудь что-нибудь выводите для того, чтобы окно консоли не было пустым?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 19.06.2012, 15:48   #3
Nightmare0
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 4
По умолчанию

В точке входа программы (процедура main) нужно создать экземпляр класса этого класса, соответствующими функциями выводить результат, либо в механизм функции вписать функцию вывода.
Nightmare0 вне форума Ответить с цитированием
Старый 19.06.2012, 16:08   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Granus поцык просто отжал у кого-то код, а как заюзать не знает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.06.2012, 09:24   #5
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

НЕ, не будет работать, главной работалки нету. Нужно накопить денег, купить себе мозг и попробовать воспользоваться им.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает relese версия проги и debug работает тока на моем компе D][mon C# (си шарп) 2 04.05.2012 20:21
Программа работает в WinXP и не работает в Win7 blblbl-org Общие вопросы Delphi 4 23.04.2012 19:50
Программа работает пошагово, но не работает при запуске -Katerina- Microsoft Office Excel 3 12.07.2011 03:40
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
Библиотека НЕ работает с 2008, но работает с 2000 SQL namenike Общие вопросы C/C++ 0 26.05.2009 11:04