fork download
  1. #include <stdio.h>
  2. int bit_test(unsigned long *flg, int pos){
  3. return((*flg) >> pos & 1UL);
  4. }
  5. void bit_set(unsigned long *flg, int pos){
  6. *flg |= 1UL << pos;
  7. }
  8. void bit_reset(unsigned long *flg, int pos){
  9. *flg &= ~(1UL << pos);
  10. }
  11. void f(int arr[], unsigned long *flg, int n, int m){
  12. int i;
  13. if(m == 0){
  14. for(i = 0; i < n; i++){
  15. printf("%d ", arr[i]+1);
  16. }
  17. printf("\n");
  18. return;
  19. }
  20. for(i = 0; i < n; i++){
  21. if(!bit_test(flg, i)){
  22. bit_set(flg, i);
  23. arr[n-m] = i;
  24. f(arr, flg, n, m-1);
  25. bit_reset(flg, i);
  26. }
  27. }
  28. }
  29. int main(void){
  30. int arr[64], n;
  31. unsigned long flg = 0;
  32. scanf("%d", &n);
  33. if(n < 0 || 64 < n){
  34. puts("error");
  35. return(1);
  36. }
  37. f(arr, &flg, n, n);
  38. return(0);
  39. }
  40.  
Success #stdin #stdout 0s 4820KB
stdin
4
stdout
1 2 3 4 
1 2 4 3 
1 3 2 4 
1 3 4 2 
1 4 2 3 
1 4 3 2 
2 1 3 4 
2 1 4 3 
2 3 1 4 
2 3 4 1 
2 4 1 3 
2 4 3 1 
3 1 2 4 
3 1 4 2 
3 2 1 4 
3 2 4 1 
3 4 1 2 
3 4 2 1 
4 1 2 3 
4 1 3 2 
4 2 1 3 
4 2 3 1 
4 3 1 2 
4 3 2 1