采用dfs就可以实现:
排列:
#include<stdio.h>
#include<string.h>
int vis[100];
int p[100];
int nn;
void arr(int deep,int k)
{
for (int i=0;i<nn;i++)
if (deep==k)
{
for (int j=0;j<k;j++)
printf("%d ",p[j]);
printf("\n");
return;
}
else
{
if (!vis[i])
{
vis[i]=1;
p[deep]=i;
arr(deep+1,k);
vis[i]=0;
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
nn=4;
arr(0,4);
}
组合:
<pre class="cpp" name="code">#include<stdio.h>
#include<string.h>
int vis[10000];
int k,n;
void combin(int deep,int use)
{
vis[use]=deep;
if (use==k)
{
for (int i=1;i<=k;i++)
{
printf("%d ",vis[i]);
}
printf("\n");
return;
}
else
{ if (deep+1<=n)
{
combin(deep+1,use+1);
combin(deep+1,use);
}
}
}
int main()
{
n=6;k=3;
combin(0,0);
}