Posted on 2006-04-12 17:31
魔のkyo 阅读(203)
评论(0) 编辑 收藏 引用 所属分类:
Programming
#include
<
iostream
>
#include
<
stdlib.h
>
using
namespace
std;
typedef
char
TdfsType;
//
所排列元素类型定义
/*
class Tdfs是一个进行排列的类
构造函数Tdfs(int nn,int kk,TdfsType *ddata);
对ddata数组中的前nn项做nn P kk的排列,即nn取kk任取,对每种排列执行function函数
*/
class
Tdfs{
private
:
TdfsType
*
a,
*
data;
int
*
used, k,n;
//
n P k
void
dfs(
int
d);
void
function(
void
);
public
:
Tdfs(
int
nn,
int
kk,TdfsType
*
ddata);
~
Tdfs(){delete [] a;delete [] used;};
};
Tdfs::Tdfs(
int
nn,
int
kk,TdfsType
*
ddata){
n
=
nn;k
=
kk;data
=
ddata;
a
=
new
TdfsType [n];
used
=
new
int
[n];
for
(
int
i
=
0
;i
<
n;i
++
)a[i]
=
used[i]
=
0
;
dfs(
0
);
}
void
Tdfs::dfs (
int
d){
if
(d
==
k){
//
找到一种排列
function();
}
else
{
for
(
int
i
=
0
;i
<
n;i
++
){
if
(used[i]
==
0
){
used[i]
=
1
;
a[d]
=
data[i];
dfs (d
+
1
);
used[i]
=
0
;
}
//
if
}
//
for
}
}
void
Tdfs::function(
void
){
/*
修改此函数可以对得到的每种排列进行操作,例如输出
a[i]是传入数据的副本可以进行修改
for(int i=0;i<k;i++)cout<<a[i];
cout<<endl;
*/
for
(
int
i
=
0
;i
<
k;i
++
)cout
<<
a[i];
cout
<<
endl;
}
int
main(){
TdfsType array[
4
]
=
{
'
a
'
,
'
b
'
,
'
c
'
,
'
d
'
};
Tdfs a(
4
,
3
,array);
//
system("pause");
return
0
;
}