#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