TSP1 오류 입니다.

  • User Avatar
    skylife927

    예제는 다 맞췄는데 출제하고 나면 오류로 나오는데요.
    1. 순열을 구한다.
    2. 해당 나열의 값을 더한다.
    3. 혹 MIN값 이상된다면 return한다.(가지치기)

    왜그런지 이상하네요@_@;
    ~~~ c++

    #include

    using namespace std;

    double abc[10][10];
    double MIN=999999;

    void swap(int* arr, int i, int j){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }

    void perm(int* arr, int depth, int n){
    if(depth == n){
    /*for(int i=0; i cout< }cout< //한턴에 다음것을 가지고 좌표를 찾아 값을 넣는다.
    double sum=0;
    for(int i=0; i double temp = abc[arr[i]][arr[i+1]];
    sum+=temp;
    if(sum > MIN) return;
    }
    if(MIN > sum) MIN = sum;
    return;
    }
    for(int i=depth; i<n; i++){
    swap(arr, i, depth);
    perm(arr, depth+1, n);
    swap(arr, i ,depth);
    }
    }

    int main(int argc, char** argv)
    {
    int test_case;
    int T;

    int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7};
    cin >> T;
    for(test_case = 0; test_case < T; test_case++)
    {
        int n;
        cin>>n;
    
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                cin>>abc[i][j];
            }
        }
    
        perm(arr, 0, n);
        printf("%.10lf\n", MIN);
    }
    return 0;
    

    }


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

    어떤 예외케이스가 있는지.. 흠..


    10년 전 link
  • User Avatar
    skylife927
    1. N이 1인경우를 고려안했네요.
    2. MIN값에 대한 초기화가 안되어 있었습니다.

    해결완료!


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