#include <stdio.h>int sum = 0;
int n;
int in_hand[10];
int tmp[10];
void dfs(int in_)
{
if(in_ == n+1)
{
++sum;
for(int i = 0; i != n+1;++i) printf("%d ",tmp[i]);
printf("\n");
return ;
}
for(int i = 0; i != n+1 ; ++i)
{
if(in_hand[i] == 1)
{
tmp[in_] = i;
in_hand[i] = 0;
dfs(in_+1);
in_hand[i] = 1;
}
}
return ;
}
int main()
{
printf("排序从0-n个数进行排序,也就是n+1个数,结果为(n+1)*n*(n-1)*....1 以下输入n\n");
p:scanf("%d",&n);if(n >= 10 || n <= 0) {printf("输入有误!重新输入.\n"); goto p;}
for(int i = 0; i != n+1;++i) in_hand[i]=1;
dfs(0);
printf("%d",sum);
return0;
}
递归算法
#include <bits/stdc++.h>#define rep( x, a, b ) for ( int x = a; x != b; ++x )usingnamespacestd;
int total;
string str = "1234567890";
void handle( string a, string b )
{
if ( a.size() == str.size() )
{
/* printf("%s\n",a.c_str()); */
total++;
return;
}else{
rep( x, 0, b.size() )
{
string tmpa( a );
string tmpb( b );
string tmp1 = tmpa + tmpb.at( x );
string tmp2 = tmpb.erase( x, 1 );
handle( tmp1, tmp2 );
}
}
}
int main()
{
handle( "", str );
printf( "%d\n", total );
}
STL next_permutation函数
#include <bits/stdc++.h>#define rep( x, a, b ) for ( int x = a; x != b; ++x )usingnamespacestd;
int total;
string str = "abcdefghij";
int main()
{
do
{
total++;
}
while ( next_permutation( str.begin(), str.end() ) );
printf( "%d\n", total );
}