输入3输出3的全排列 123 132 213 231 312 321 类似于n皇后问题,
伪代码:void 函数名()
{
判断边界
尝试每一种可能for();
{
继续下一步 函数名(n+1)
}
return ;
}
#include<stdio.h>
int n,a[12],book[12];
void dfs(int step)
{
if(step==n+1)
{
for(int j=1;j<=n;j++)
printf("%d",a[j]);
printf(" ");
return ;
}
for(int i=1;i<=n;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
}
int main()
{
scanf("%d",&n);
dfs(1);
return 0;
}
类似的还有迷宫问题
#include<stdio.h>
int a[7][6]={{1,1,1,1,1,1},{1,0,0,1,0,1},{1,0,0,0,0,1},{1,0,0,1,0,1},{1,0,1,0,0,1},{1,0,0,0,1,1},{1,1,1,1,1,1}};
int book[5][5];
int min=999;
int x,y;
void dfs(int xi,int yi,int step)
{
int tx,ty,di;
if(xi==x&&yi==y)
{
if(step<min)
min=step;
return ;
}
for(di=0;di<4;di++)
{
switch(di)
{
case 0:tx=xi-1;ty=yi; break;
case 1:tx=xi; ty=yi+1; break;
case 2:tx=xi+1;ty=yi; break;
case 3:tx=xi; ty=yi-1; break;
}
if(a[tx][ty]==0&&book[tx][ty]==0)
{
book[tx][ty]=-1;
dfs(tx,ty,step+1);
book[tx][ty]=0;
}
}
}
int main()
{
scanf("%d%d",&x,&y);
dfs(1,1,0);
printf("%d\n",min);
return 0;
}