TSP1 문제

  • sypark9
    sypark9

    질문하시기 전에

    예제의 input으론 정답이 나오는데, 답안 제출을 하면 오답이 뜨네요. 몇시간을 생각했는데 잘못된 부분을 찾지 못해서 도움을 구합니다.

    #include <stdio.h>
    
    #define MAXCITY 8
    
    double matrix[MAXCITY][MAXCITY];
    int isSelected[MAXCITY];
    int numOfCity;
    
    int isAllSelected()
    {
        int i;
    
        for(i=0;i<numOfCity;i++)
            if(isSelected[i] == 0 )
                return 0;
    
        return 1;
    }
    
    double travel(int prevCity)
    {
        int i;
        double distance;
        double minDist =9999.0;
        int minCity;
    
        if(isAllSelected())
            return 0.0;
    
        for(i=0; i<numOfCity; i++)
        {
            if(isSelected[i]== 0) {
                isSelected[i] = 1;
    
                distance = travel(i);
    
                if( (distance < minDist) )
                {
                    minDist = distance;
                    minCity = i;
                }
    
    
                isSelected[i] = 0;
            }
    
        }
    
        if( prevCity != -1) {
            minDist += matrix[prevCity][minCity];
            //printf("minCity = %d\n",minCity);
        }
    
    
    
        return minDist;
    }
    
    int main()
    {
        int cases;
    
        int i,j;
        double inputd;
        double minDist;
    
        //freopen("input.txt","r",stdin);
        scanf("%d",&cases);
    
        while(cases--) {
            scanf("%d",&numOfCity);
    
            for(i=0; i<numOfCity; i++)
            {
                for(j=0; j<numOfCity;j++)
                {
                    scanf("%lf",&inputd);
                    matrix[i][j] = inputd;
                    //printf("%.10f ",matrix[i][j]);
    
                }
                //printf("\n");
            }
    
            for(i=0; i<MAXCITY; i++)
                isSelected[i] = 0;
    
            minDist = travel(-1);
            printf("%.10lf\n", minDist);
    
        }
    
        return 0;
    }
    

    앞과 뒤에 빈 줄 하나씩을 반드시 추가하셔야 합니다.


    10년 전
2개의 댓글이 있습니다.
  • JongMan
    JongMan

    minCity를 고른 뒤에 prevCity와 minCity 사이의 거리를 더하시고 있는데, 그러면 잘못된 답을 찾을 수 있습니다~


    10년 전 link
  • sypark9
    sypark9

    도움 주셔서 감사합니다. ^^


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