*题目:
给一个1~7的数字n,输出1~n的整数的所有可能排列顺序
*代码
#include<iostream>
using namespace std;
int n,path[10];//path[]标记位数,站位
bool mark[10]={0};//0表示没用过,mark标记手中有无剩余的牌
void dfs(int u)
{
if(u==n)
{
for(int i=0;i<n;i++) cout<<path[i]<<" ";
puts("");//换行
return;//勿忘返回
}
for(int i=1;i<=n;i++)
{
if(!mark[i])
{
path[u]=i;//把牌放在位置上
mark[i]=true;//并标记此牌已不在手里
dfs(u+1);//走到下一个位置
//path[i]=0; 因为放新牌时直接覆盖了,所以不用标记0
mark[i]=false;//每个回溯都需要还原现场
}
}
}
int main()
{
cin>>n;
dfs(0);//从0这个位置开始放牌
}
*图解过程
*补充思考:
dfs会一直走到头
递归:在位置位数之间横向走动
for循环:遍历手中卡牌可不可用