1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | int n; bool areFriends[10][10]; // taken[i] = i번째 학생이 짝을 이미 찾았으면 true, 아니면 false int countpair(bool taken[10]) { // 남은 학생들 중 가장 번호가 빠른 학생을 찾는다. int firstFree = -1; for(int i=0; i<n; i++) { if(taken[i] == 0) { first = i; break; } } // 기저 사례: 모든 학생이 짝을 찾았으면 한 가지 방법을 찾았으니 종료한다. if(firstFree == -1) return 1; int ret = 0; // 이 학생과 짝지을 학생을 결정한다. for(int pairWith=firstFree+1; pairWith<n; ++pairWith) { if(taken[pairWith] == 0 && areFriends[firstFree][pairWith]) { taken[firstFree] = taken[pairWith] = true; ret += countpair(taken); taken[firstFree] = taken[pairWith] = false; } } return ret; } | cs |
2017 10 23 증명의 부제 (0) | 2017.10.23 |
---|---|
DP 를 배우다 (0) | 2017.10.05 |
20170917 - 정리에 시간 (0) | 2017.09.17 |
알고리즘 문제풀이 사이트 (0) | 2017.09.03 |
n 개의 원소중 m개를 고르는 모든 조합을 찾는 알고리즘 (0) | 2017.08.20 |
댓글 영역