#include <iostream>
#include <string.h>
using namespace std;
bool studentArr[10]; // 1번 학생이 짝이 되면 1번은 1 2 번은 원래 0이고
bool areFriend[10][10];
int stuNum; //학생수
int matchNum; //짝의 수
int answer = 0; //정답
int countanswer() {
int firstNum = -1; //가장 처음이 비어있다는것을 의미
for (int i = 0;i < stuNum;i++) {
if (studentArr[i] == 0) { //학생수 만큼의 배열이 비어있으면 그 숫자가 비어있는 첫번쨰 순서가됨
firstNum = i; //즉 시작 기준이 된다는말 (재귀의 기준)
break;
}
}
if (firstNum == -1) { return 1; } //만약 firstNum 이 비어있다면 = 모든 숫자가 다 차있다면 종료
int ret = 0; //정답
for (int j = firstNum+1;j < stuNum;j++) {
if (areFriend[firstNum][j] && !studentArr[j]) {
studentArr[j] = true;
studentArr[firstNum] = true;
ret += countanswer();
studentArr[j] = false;
studentArr[firstNum] = false;
}
}
return ret;
}
int main() {
int caseNum;
cin >> caseNum;
while (caseNum--) {
cin >> stuNum >> matchNum;
memset(studentArr, 0, sizeof(bool) * 10); //배열들을 전부 초기화
memset(areFriend, 0, sizeof(bool) * 10 * 10);
int friend1, friend2;
for (int i = 0;i < matchNum;i++) { //친구 1 2 에 따라 전부 참으로 바꾸어줌
cin >> friend1 >> friend2;
areFriend[friend1][friend2] = true;
areFriend[friend2][friend2] = true;
}
cout << countanswer() << endl;
}
return 0;
}
학생수만큼의 1차원 배열과 짝이되는 2차원 배열 두개를 구성하여 구현하였습니다.
예제가 4 6 인경우 원래 3이 나와야 하는데 2가 나오는 오류가 있습니다.
근데 정답처리가 되었다는...
다른 것들은 다 되는데 예제만 안되서 ...... ㅠㅠ
코드 한번 봐주시면 정말 감사하겠습니다. 그리고 이거 채점 기준을 다시 수정하셔야 될듯합니다. 감사합니다.
fkdlslss
학생수만큼의 1차원 배열과 짝이되는 2차원 배열 두개를 구성하여 구현하였습니다.
예제가 4 6 인경우 원래 3이 나와야 하는데 2가 나오는 오류가 있습니다.
근데 정답처리가 되었다는...
다른 것들은 다 되는데 예제만 안되서 ...... ㅠㅠ
코드 한번 봐주시면 정말 감사하겠습니다. 그리고 이거 채점 기준을 다시 수정하셔야 될듯합니다. 감사합니다.
10년 전