Возврат решить самый короткий путь

Использование возвратов для решения следующей задачи

Вопрос: продавец в ряд городов, чтобы продать товары, известное расстояние между городами. Он снова выбран из резидента, после каждого города, и, наконец, обратно на маршрут станции, чтобы минимизировать общее расстояние (или общие расходы). Количество городов менее пяти.

 

 

#include <iostream>
 использование  пространства имен STD;

Const  ИНТ INF = 10000000 ;
INT п, сс = 0 , bestc = INF;
Int ** г;
INT * х * bestx;

недействительное путешествие ( INT т) {
     если (т == п) {
         если (г [х [п - 1 ]]! [х [т]] = INF && г [х [т]] [ 1 ] = INF && 
            (сс + г [х [п - 1 ]] [х [т]] + д [х [т]] [ 1 ] <bestc || bestc == INF)) {
             для ( INT I = 0 ; я <п + 1 ; я ++ )
                bestx [I] = х [г];
            bestc = CC + г [х [п - 1 ]] [х [т]] + д [х [т]] [ 1 ];
        }
        вернуться ;
    }

    для ( INT I = т; я <п; я ++ ) {
         если (г [х [т - 1 !]] [х [г]] = INF && (CC + г [х [п - 1 ]] [х [ я]] < bestc
             || bestc == INF)) {
            своп (х [г], х [т]);
            сс + = г [х [п - 1 ]] [х [т]];
            путешествия (т + 1 );
            куб.см - = г [х [п - 1 ]] [х [т]];
            своп (х [г], х [т]);
        }
    }
}

недействительными выход () {
    соиЬ << « Самое короткое расстояние: » << «  » ;
    соиЬ << bestc << End L , ;
    соиЬ << « оптимальный путь: » << «  » ;
    COUT << bestx [ 1 ];
    для ( Int I = 2 ; я <п + 1 ; я ++ )
        соиЬ << "  " << bestx [я];
    COUT << "  " << bestx [ 1 ] << ENDL;
}

Int основных () {

    п = . 4 ; // . установить число п города 4 
    G = новый новый  INT * [п + 1. ]; // G представлена массивом пути хранения 
    Х = новый новый  INT [п + 1. ];
    bestx = новый  INT [п + 1 ];

    для ( Int I = 0 ; я <п + 1 ; я ++ ) {
        г [я] = новый  Int [п + 1 ];
        х [г] = I;

        для ( INT J = 0 ; J <п + 1 ; j ++ )
            г [я] [J] = INF;
    }

    G [ 1. [] 2 ] = G [ 2 ] [ 1. ] = 30 ; // 1 <-> расстояние между 2. 
    G [ 1. ] [ 3. ] = G [ 3. ] [ 1. ] = 6. ;
    g[1][4] = g[4][1] = 4;

    g[2][3] = g[3][2] = 5;
    g[2][4] = g[4][2] = 10;

    g[3][4] = g[4][3] = 20;

    путешествия ( 2 );
    выход();
    Система ( " пауза " );
    вернуться  0 ;
}

рекомендация

отwww.cnblogs.com/wxh-blos/p/12093432.html