PICNIC문제 잘못된 예제에 대해서 질문이 있습니다.

  • krjj21
    krjj21

    안녕하세요. 알고리즘 문제 해결 전략 책을 보고 공부하고 있습니다.
    PICNIC 문제를 풀고 있는데요. 아래 있는 코드는 짝을 찾을 때 중복으로 찾아야 하는 코드 입니다.
    그런데 중복으로 찾지를 않더라구요.
    왜냐면 areFriends[10][10]에 짝이 되어야 하는 친구들의 좌표에 true를 찍어주면 한번 찾습니다.
    예를 들면 (0,1) 이 친구인데 areFriends에 [0][1]에 1을 찍어두면 [0][1]이 짝일때만 카운트 되더라구요.
    원래는 중복으로 찾아서 2가 나와야되는데 어떻게하면 중복으로 되서 2가 나오는지 잘 모르겠습니다.
    조언 부탁드립니다.

    #include <iostream>
    using namespace std;
    
    int n; 
    int areFriends[10][10];
    
    int countPairings(int* taken)
    { 
        bool finished = true;
        for (int i = 0; i < n; i++)
        {
            if (!taken[i]) finished = false;
        }
        cout << endl;
        if (finished) return 1;
    
        int ret = 0;
    
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                if (!taken[i] && !taken[j] && areFriends[i][j])
                {
                    taken[i] = taken[j] = true;
                    ret += countPairings(taken);
                    taken[i] = taken[j] = false;
                }
            }
        }
    
        return ret;
    }
    
    void main()
    {
        int T;
        int pair;
        int x, y;
        int v = 0;
        int arr[10] = { false,false, };
    
        freopen("input.txt", "r", stdin);
    
        cin >> T;
    
        for (int i = 0; i < T; i++)
        {
            cin >> n >> pair;
    
            for (int j = 0; j < pair; j++)
            {
                cin >> x >> y;
                areFriends[x][y] = true;
            }
    
            cout << countPairings(arr) << endl;
    
            //init
            for (int a = 0; a < 10; a++)
                for (int b = 0; b < 10; b++)
                {
                    areFriends[a][b] = 0;
                }
    
        }
    
    
    }
    

    8년 전
2개의 댓글이 있습니다.
  • seico75
    seico75

    0 1 이 친구면 0 1일때, 1 0일때 두번 체크가 되게 하고 싶다는 건가요?
    그러면..
    areFriends[x][y] = true; 를
    areFriends[x][y] = areFriends[y][x] = true; 로 변경하시면 되겠네요


    8년 전 link
  • krjj21
    krjj21

    아 책에는 MAIN 함수가 없으니... 설명하는데 한계가 있네요...

    어쨋든 얘기해주셔서 너무 감사합니다..


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