PICNIC문제 질문드립니다

  • ybg7955
    ybg7955
    #include <iostream>
    using namespace std;
    
    int n;
    bool  areFriends[10][10];
    
    int countPairings(bool taken[10]) {
        int firstFree = -1;
        for (int i = 0; i < n; i++) {
            if (!taken[i]) {
                firstFree = i;
                break;
            }
        }
        if (firstFree == -1) return 1;
        int ret = 0;
        for (int pairWith = firstFree + 1; pairWith < n; pairWith++) {
            if (!taken[pairWith] && areFriends[firstFree][pairWith]) {
                taken[firstFree] = taken[pairWith] = true;
                ret += countPairings(taken);
                taken[firstFree] = taken[pairWith] = false;
            }
        }
        return ret;
    }
    
    int main() {
        bool friends[10];
        int testCase;
        int m;
        cin >> testCase; if (testCase > 50 && testCase <= 0) return 0;
        for (int C = 0; C < testCase; C++) {
            cin >> n; if (n < 2 && n>10) return 0;
            cin >> m; if (m < 0 && m>(n*(n - 1)/2)) return 0;
            int pairs[2];
            for (int pair = 0; pair < m; pair++) {
                cin >> pairs[0];
                cin >> pairs[1];
                areFriends[pairs[0]][pairs[1]] = true;
                areFriends[pairs[1]][pairs[0]] = true;
            }
            countPairings(friends);
            cout << "result : " <<countPairings(friends) << endl;
            for (int i = 0; i < 10; i++) {
                friends[i] = false;
                for (int j = 0; j < 10;j++) {
                    areFriends[i][j] = false;
                }
            }
        }
        return 0;
    }
    

    이게 책에도 있는 문제여서 책그대로 하고 제가 main만 짰는데 예제 케이스는 똑같이 나오거든요. 그리고 제약조건들 한것같고.. 근데 왜
    오답이 나오는지 궁금합니다.


    7년 전
1개의 댓글이 있습니다.
  • Corea
    Corea

    아래 문제점이 있습니다.

    1. friends 변수를 처음에 초기화를 하지 않았습니다. 초기화 해주세요.
    2. countPairings 함수를 두 번 부르는데, 두 번 부르면 두 번째 결과는 다르지 않나요?
    3. 출력 앞에 "result : "는 제거해주세요.

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