http://blog.csdn.net/hackbuteer1/article/details/7454252
10、下面程序的功能是输出数组的全排列,请填空。
void perm(int list[],int k,int m)
{
if(_______)
{
copy(list,list+m,ostream_iterator<int>(cout," "));
cout<<endl;
return ;
}
for(int i = k ; i <= m ; ++i)
{
swap(&list[k] , &list[i]);
______________;
swap(&list[k] , &list[i]);
}
}
void main()
{
int list[] = {1,2,3,4,5};
perm(list,0,sizeof(list)/sizeof(int)-1);
}
解释如下:
perm有三个参数:
1.list,链表本身,
2.0,全排列的起始位置
3.sizeof(list)/sizeof(int)-1 全排列的结束位置
当k==m的时候,输出全排列
综上 (0.m)的全排列
(1,m)的全排列
(2,m)的全排列
(3,m)的全排列
。。
(m.m)的全排列
所以总有m!种方案
void swap(int& a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void perm(int list[],int k,int m)
{
if(k==m)
{
copy(list,list+m+1,ostream_iterator<int>(cout," "));
cout<<endl;
return ;
}
for(int i = k ; i <= m ; ++i)
{
swap(list[k],list[i]);
perm(list,k+1,m);
swap(list[k],list[i]);
}
}
void main()
{
int list[] = {1,2,3,4,5};
perm(list,0,sizeof(list)/sizeof(int)-1);
}