TSP1 문제 질문있습니다.

  • jeapi
    jeapi

    재귀함수를 통해 모든 경우의수를 다 구한뒤..
    min값을 출력하는 알고리즘으로 해결했습니다.
    .
    예를들어 3개의 도시를 방문하면

    1->2->3
    1->3->2
    2->1->3
    2->3->1
    3->1->2
    3->2->1

    방법으로 모든 경로를 모두 체크해 보면서 최소값을 구합니다.
    어떤 문제가 있을까요..

    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int arr[8] = { 2, 3, 5, 7, 11, 13, 17, 19 };
    double a[8][8];
    int mc, k;
    double ret;
    int solve(int u, double sum, int chack){
        if (chack == mc){
            ret = min(ret, sum);
            return 0;
        }
        for (int i = 0; i < k; i++){
            if (chack%arr[i] != 0){
                solve(i, sum + a[u][i], chack*arr[i]);
            }
        }
    
    }
    int main(){
        int t;
        ret = 14150;
        cin >> t;
        while(t--){
            cin >> k;
            mc = 1;
            for (int i = 0; i < k; i++){
                mc *= arr[i];
            }
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++){
                    cin >> a[i][j];
                }
            }
            for (int i = 0; i < k; i++)
                solve(i, 0, arr[i]);
            printf("%.10f\n", ret);
        }
    
        return 0;
    }
    


    9년 전
2개의 댓글이 있습니다.
  • Being
    Being

    ret 값에 유의하세요.


    9년 전 link
  • jeapi
    jeapi

    초기화 장소가 잘못됫네요 감사합니다 ㅎㅎ


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.