문제 소풍 PICNIC이 해결되지않습니다.

  • 시나브로
    시나브로

    PICNIC

    입력으로 예시들은 물론,
    10 13
    0 1 0 2 0 3 1 2 1 3 2 3 4 5 4 6 4 7 5 6 5 7 6 7 8 9
    와 같은 예시도 넣어봤으나, 제 생각엔 정답이었습니다.
    왜 틀렸는지 궁금합니다.
    부탁드리겠습니다!

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    bool Pairing [10][10];
    bool Taken [10];
    int Pair_number;
    int Student_number=0;
    //매칭함수
    int matching (bool Taken [10])
    {
        int First_student =0;
        bool finished = true ;
        for(int a =0; a<Student_number; ++a)
        {
         if(Taken[a]==0)
         { First_student =a;
             finished = false ;
         break;}
        }
         if(finished == true)
         {return 1;}
    //기저완료
        int Pairing_number =0;
        for(int Second_student = First_student+1; Second_student < Student_number; ++Second_student)
        {
            if((Taken[Second_student]==0) && (Taken[First_student]==0) && (Pairing[First_student][Second_student]==1))
            {
            Taken[Second_student]=1;
            Taken[First_student]=1; 
            Pairing_number += matching(Taken);
            Taken[Second_student]=0;
            Taken[First_student]=0; 
            }
        }
        return Pairing_number;
    }
    
    //메인함수
    
    int main ()
    {   
        memset(Pairing,0,sizeof(Pairing));
        memset(Taken,0,sizeof(Taken));
        int C,i,j;
        cin>>C;
        while(C--)
        {
            cin>>Student_number>>Pair_number;
            while(Pair_number--)
            {cin>>i>>j;
            Pairing[i][j]=1;
            Pairing[j][i]=1;
            }
            //함수
            cout<<matching(Taken)<<endl;
        }
     return 0;
    }
    
    }
    

    5년 전
2개의 댓글이 있습니다.
  • Corea
    Corea

    매 테스트케이스마다 Pairing, Taken 변수를 초기화해주셔야 할 것 같아요.


    5년 전 link
  • 시나브로
    시나브로

    정말 감사합니다!!


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