#include <iostream>
using namespace std;
const int N = 10;
int nSize;
int Result[N];//记录路径
int Src[N];//原数组
bool IsUse[N];//记录当前元素是否使用
int nPos = 1;//记录层数
void Dfs()
{
if(nPos == nSize + 1)
{
for(int j = 1; j <= nSize; j++)
{
cout<<Result[j]<<" ";
}
cout<<endl;
return;
}
for(int i = 1; i <= nSize; i++)
{
//如果没被使用
if(IsUse[i])
{
IsUse[i] = false;
//记录下这条路径
Result[nPos] = Src[i];
//进入下一层
nPos++;
Dfs();
//恢复现场
nPos--;
IsUse[i] = true;
}
}
}
int main(int argc, char** argv)
{
fill(IsUse,IsUse+N,true);
cin>>nSize;
for(int i = 1; i <= nSize; i++)
{
cin>>Src[i];
}
Dfs();
return 0;
}
DFS解决全排列
最新推荐文章于 2022-03-14 19:35:21 发布