TSP1 문제 질문있습니다.

  • User Avatar
    jeapi

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

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

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


    ~~~ c++

    #define _CRT_SECURE_NO_WARNINGS
    #include
    #include
    #include
    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;
    

    }

    </spoiler>
    

    11년 전
2개의 댓글이 있습니다.
  • User Avatar
    Being

    ret 값에 유의하세요.


    11년 전 link
  • User Avatar
    jeapi

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


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