递归的使用,其中过程还要慢慢体会
#include<cstdio>
#include<cstring>
int rec[20],num[20],n;
int vis[20];
void dfs(int dep)
{
//printf("s*******\n");
if(dep==n)
{
//printf("输出:");
for(int i=0;i<n;i++) printf("%d ",rec[i]);
puts("");
// puts("return到:");
return ;
}
for(int j=0;j<n;j++)
{
// printf("循环开始:%d %d %d\n",dep,j,vis[j]);
if(vis[j]) continue;
vis[j]=1;
rec[dep]=num[j];
dfs(dep+1);
vis[j]=0;
// printf("dfs后:%d %d %d\n",dep,j,vis[j]);
// puts("x*******");
}
}
int main()
{
int i,j;
int flag=0;
while(scanf("%d",&n),n)
{
if(flag) puts("");
for(i=0;i<n;i++) scanf("%d",&num[i]);
memset(vis,0,sizeof(vis));
dfs(0);
}
}