[ALGOSPOT]소풍
2018. 7. 4. 15:39ㆍ알고리즘/탐색
[ALGOSPOT]소풍
소풍
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import java.util.Scanner; public class Main { public static boolean[][] areFriends; public static int n; //taken[i] = i번째 학생이 짝을 이미 찾았으면 true; 아니면 false private static int countPairings(boolean[] taken) { //남은 학생들 중 가장 번호가 빠른 학생을 찾는다. 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; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int count = sc.nextInt(); String result = ""; for (int j = 0; j < count; j++) { n = sc.nextInt(); int friendCount = sc.nextInt(); areFriends = new boolean[10][10]; for (int i = 0; i < friendCount; i++) { int a = sc.nextInt(); int b = sc.nextInt(); areFriends[a][b] = areFriends[b][a] = true; } boolean[] data = new boolean[10]; result += (j + 1 == count) ? countPairings(data) : countPairings(data) + "\n"; } System.out.println(result); } } | cs |
'알고리즘 > 탐색' 카테고리의 다른 글
[ALGOSPOT] 게임판 덮기(BOARDCOVER) (0) | 2018.07.04 |
---|---|
[ALGOSPOT] 보글게임(BOGGLE) (1) | 2018.07.04 |
[백준 BOJ] 1019번 책 페이지 (0) | 2018.04.09 |