该问题可以想象成,我有一盒纸牌和一盒箱子(纸牌数量和盒子数量相等)。把纸牌放进盒子,求有多少种不同的方法。
#include <iostream>
using namespace std;
int n,idx;
int vis[15],arr[15];
void dfs(int x)//x:第x个盒子
{
if(x==n+1)//当所有盒子不空的时候
{
for(int i=1;i<=n;i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
for(int i=1;i<=n;i++)//i:第i张纸牌
{
if(!vis[i])//判断这张纸牌是否已经放入了盒子,若已经放入,那么vis[i]=1,若未放入,那么vis[i]=0;
{
arr[x]=i;//第i张纸牌放入第x个盒子
vis[i]=1;//标记
dfs(x+1);
vis[i]=0;//从第x个盒子取出第i张纸牌
}
}
}
int main()
{
cin >> n;//一共有n个纸牌,n个盒子
dfs(1);
return 0;
}