전체 배열 알고리즘 원리 와 실현

전체 배열 은 한 조 의 수 를 일정한 순서에 따라 배열 하 는 것 이다. 만약 이 조 의 수가 n 개가 있다 면 전체 배열 수 는 n 이다!개 1현재 {1, 2, 3, 4, 5} 을

1、 4, 5。 4 5 5 4, 4 5 5 4 。
, 。
2、 3, 4, 5。 3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 。
3 4,5 、 4 3,5 5 3,4 .
, p = {r1, r2, r3, ... ,rn}, perm(p),pn = p - {rn}。
perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。 n = 1 perm(p} = r1。
, , n-1 。


#include 
<
stdio.h
>
  
int
 n 
=
 
0
;  
void
 swap(
int
 
*
a, 
int
 
*
b) {         
int
 m;         m 
=
 
*
a;         
*

=
 
*
b;         
*

=
 m; }  
void
 perm(
int
 list[], 
int
 k, 
int
 m) {         
int
 i;         
if
(k 
>
 m)         {                  
for
(i 
=
 
0
; i 
<=
 m; i
++
)                         printf(
"
%d 
"
, list[i]);                 printf(
"
"
);                 n
++
;         }         
else
         {                 
for
(i 
=
 k; i 
<=
 m; i
++
)                 {                         swap(
&
list[k], 
&
list[i]);                         perm(list, k 
+
 
1
, m);                         swap(
&
list[k], 
&
list[i]);                 }         } } 
int
 main() {         
int
 list[] 
=
 {
1

2

3

4

5
};         perm(list, 
0

4
);         printf(
"
total:%d
"
, n);         
return
 
0
; } 
              ,   。

좋은 웹페이지 즐겨찾기