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 | #include <stdio.h> #define SWAP(T,x,y) {T tmp = x; x = y; y = tmp;} int m[100]; int v[100]; int N; int tc; void print(){ for (int i = 0; i < N; i++) printf("%d ", m[i]); printf("\n"); } void backtrack(int s){ // condition if (s == N - 1){ print(); return; } //recursive for (int i = s; i < N; i++){ SWAP(int, m[s], m[i]); backtrack(s + 1); SWAP(int, m[s], m[i]); } } int main(){ freopen("output.txt", "w", stdout); int T; scanf("%d", &T); while (T--) { scanf("%d", &N); for (int i = 0; i < N; i++) scanf("%d", &m[i]); printf("#%d\n", ++tc); backtrack(0); } return 0; } | cs |
'Programming > Algorithm' 카테고리의 다른 글
길찾기 알고리즘(0 에서 99로 갈 수 있는지 확인) (0) | 2016.03.11 |
---|---|
멱집합(부분집합) 응용, 조건에 따라 불필요한 부분집합 제거 (0) | 2016.03.10 |
멱집합 (백트래킹 예제) (0) | 2016.03.10 |
회문 찾기 알고리즘 (0) | 2016.03.10 |
문자열을 숫자로 변경 코드 (0) | 2016.03.09 |