#include <stdio.h>
#include <string.h>
int m;
int vis[10000];
int a[10000];
void dfs(int n)
{
if(n==m)
{
for(int j=1;j<=m;j++)
printf("%d",a[j]);
printf("\n");
}
n++;
for(int i=1;i<=m;i++)
{
if(vis[i]) continue;//如果已经枚举过,那就换下一个
vis[i]=1;
a[n]=i;
dfs(n);
vis[i]=0;
}
}
int main()
{
while(scanf("%d",&m)==1)
{
memset(vis,0,sizeof(vis));
dfs(0);
}
}
这是0-n的
#include <stdio.h>
#include <string.h>
int m;
int vis[10000];
int a[10000];
void dfs(int n)
{
if(n==m+1)
{
for(int j=1;j<=m+1;j++)
printf("%d",a[j]);
printf("\n");
}
n++;
for(int i=0;i<=m;i++)
{
if(i==0&&n==1||vis[i]) continue;
vis[i]=1;
a[n]=i;
dfs(n);
vis[i]=0;
}
}
int main()
{
while(scanf("%d",&m)==1)
{
memset(vis,0,sizeof(vis));
dfs(0);
}
}
原文:http://blog.csdn.net/u013076044/article/details/38588623