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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2015, 15:21   #1
ksenija15reg
Пользователь
 
Регистрация: 03.10.2013
Сообщений: 22
По умолчанию Помочь найти проблему

ЭТО МИНИМАКСНАЯ ЗАДАЧА КОММИВОЯЖЕРА ПОЛНЫМ ПЕРЕБОРОМ. НЕ МОГУ ПОНЯТЬ ПОЧЕМУ ОНА ВЫВОДИТ ПУТЬ НЕ С МИНИМАЛЬНОЙ И МАКСИМАЛЬНЫХ ДУГ ПУТИ, А САМУЮ МАКСИМАЛЬНУЮ
Код:
#include "stdafx.h"
#include "string.h"
#include "ctime"
#include "iostream"
using namespace std;
 
int *aPath, *aBestPath;         
int n = 4;             
double dBestRecord = -1;
double Matrix[100][100];
 
void GetDirectPath(int nStartLevel, int nLastLevel) 
{   
    
    int nTops = 0;                
    for(int i = 0; i < n; i++) if( aPath[i] > 0 ) nTops++; else break;
    if( nTops ) nTops--;
    aPath[nTops] = nStartLevel;     
 
    if( (nStartLevel == nLastLevel) &&  (nTops == n-1))
    {
        double dCurRecord = 0;
        for(int i = 0; i < nTops; i++)
        {   
            if(dCurRecord < Matrix[ aPath[i]-1 ][ aPath[i+1]-1 ]) dCurRecord = Matrix[ aPath[i]-1 ][ aPath[i+1]-1 ];
        }
 
        if(dBestRecord < dCurRecord) 
        {
            dBestRecord = dCurRecord;
            for(int i4 = 0; i4 <= nTops; i4++)
                aBestPath[i4] = aPath[i4];      
        }
        return;
    }
 
 
    int idxNextTop = -1;        
 
    for(int i = 0; i < n; i++)
    {
 
        if( i != aPath[nTops]-1  &&  Matrix[ aPath[nTops]-1 ][i] ) {
            idxNextTop = i + 1;
            for(int j = 0; j <= nTops; j++) 
                if( idxNextTop == aPath[j] ) { idxNextTop = -1; break; }
        }
        
        if( idxNextTop != -1 )          
        {                                                                       
            aPath[++nTops] = idxNextTop;                    
            GetDirectPath( aPath[nTops], nLastLevel );  
            aPath[nTops] = -100;                                
            nStartLevel = aPath[--nTops];       
            idxNextTop = -1;                
        }
    }                   
    return; 
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    printf("Vvedite n:");
    scanf("%d", &n);
    int tt;
 
    printf("Vvedite matircu:");
    for(int i=0; i < n; i++)
        for(int j=0; j < n; j++)
        { scanf("%d", &tt); Matrix[i][j] = (double)tt;}
 
    
    aPath = new int[n];
    aBestPath =  new int[n];
    for(int ig=1; ig <= n; ig++)
        for(int jg=1; jg <= n; jg++)
            if(ig != jg) GetDirectPath( ig, jg );
 
    printf("-------------------------\n");
    for(int i = 0; i < n; i++) 
        printf("%d; ", aBestPath[i] );  
    printf(" \t R = %5.1f\n",  dBestRecord);
 
 
    delete[] aBestPath;
    delete[] aPath; 
    aPath = 0;
 
    char ch;
    scanf( &ch );
    cout << "runtime = " << clock()/1000.0 << endl; 
    getchar();
    getchar();
    return 0;
}

Последний раз редактировалось ksenija15reg; 18.06.2015 в 15:45.
ksenija15reg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти проблему вкоде Fly090 Паскаль, Turbo Pascal, PascalABC.NET 3 21.12.2014 10:56
Решить проблему или помочь в её решении "Написать программу для Дешифрования dbf-файлов" aayaresko Фриланс 2 18.05.2013 10:36
Помочь найти причину drzod Помощь студентам 1 28.02.2013 07:23
помогите найти проблему в коде mato Помощь студентам 3 05.06.2009 22:58