题目描述
有4个互不相同的数字,输出由其中三个不重复数字组成的排列。
输入
4个整数。
输出
所有排列。
样例输入 Copy
1 2 3 4
样例输出 Copy
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 2 4
1 4 2
2 1 4
2 4 1
4 1 2
4 2 1
1 3 4
1 4 3
3 1 4
3 4 1
4 1 3
4 3 1
2 3 4
2 4 3
3 2 4
3 4 2
4 2 3
4 3 2
思路:截取四次循环把每个不需要的数截取掉
4对结果,分别是没有4 3 2 1
利用dfs把结果循环出来
#include <bits/stdc++.h>
using namespace std;
int a[5];
bool f[5];
int b[5];//双数组
int r[5];
void print(int k)
{
for(int i=1;i<=k;i++)
{
cout<<r[i]<<" ";
}
cout<<endl;
}
void dfs(int k)
{
for(int i=1;i<=3;i++)
{
if(!f[i])
{
r[k]=b[i];
f[i]=true;
//dfs的递进
if(k<3) dfs(k+1);
else print(k);
f[i]=false;
}
}
}
int main()
{
for(int i=1;i<=4;i++)
{
cin>>a[i];//输入
}
for(int k=4;k>=1;k--)
{
int t=0;
for(int i=1;i<=4;i++)
{
if(i!=k)
{
t++;
b[t]=a[i];
}
}
//循环输入完以后dfs
//接住第一次dfs
for(int i=1;i<=3;i++)
{
f[i]=true;
r[1]=b[i];
dfs(2);
f[i]=false;
}
}
}