该方法简称dfs。话不多说,下面是基本模型
void dfs(int step)
{
判断边界,设置终止条件
for(i=1;i<=n;i++) //尝试每一种可能
{
dfs(step+1); //继续下一步
}
返回
}
下面我们结合一个例程来理解,求全排列
void dfs(int step)//step表示排列第几个数
{
int i;
if(step==n+1)//表示前面n个数已经排列好
{
for(i=1;i<=n;i++)
cout<<a[i];
return;//返回之前的一步
}
for(i=1;i<=n;i++)
{
if(book[i]==0)//判断这个数字用没用过
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;//一定要将刚用的数字收回,才能进行下一次尝试
}
}
return;
}
int main()
{
cin>>n;
dfs(1);//从第一个数开始排列
return 0;
}
积少成多
控制输出宽度
cout.width(x);//x表示宽度
cout<<n;
以上均为个人总结,若有错误,感谢指正!!!