题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=366
题目思路:递归+标记
#include<stdio.h>
#include<string.h>
const int MAX=11;
int deep,count;
int a[MAX];
bool visit[MAX];
void dfs(int count){
if(count==deep) { //满足深度时输出
for(int i=0;i<deep;i++) {
printf("%d",a[i]);
}
printf("\n");
return ; //返回到上一次的for循环中去
}
for(int i=1;i<=deep;i++){
if(visit[i]){ //如果i没有被用过
a[count]=i; //存入数组,待会儿输出
visit[i]=false; //用过后标记为用过
dfs(count+1); //继续找下一位数
visit[i]=true; //函数返回后就以为着回到上一次的for循环,那么这次的i定将被释放(不用),那么标记为没用过
}
}
}
int main()
{
int i,j,t,m;
scanf("%d",&t);
while(t--){
scanf("%d",&deep);
memset(visit,true,sizeof(visit));
dfs(0);
}
return 0;
}