1.排列描述:
打印输出 1 2 3 的全排列
2.方法1:
(1)思路描述:直观输出,for循环判断
(2)代码实现:
#include<iostream>
using namespace std;
int main(){
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
if(i!=j){
for(int k=1;k<=3;k++){
if(i!=k && j!=k){
cout<<i<<" "<<j<<" "<<k<<" "<<endl;
}
}
}
}
}
return 0;
2.方法2:
(1)思路描述:将1和2交换,下次将1和3交换,依次和后面的做交换
由上图可知问题的规模减小,解决方法相同,所以可以用递归的思想
(2)代码实现:
#include<iostream>
#include<algorithm>//algorithm是swap函数的头文件
using namespace std;
int num;//全排列个数
int search(int begin ,int end ,int data[]){
if(begin==end){
for(int i=1;i<=end;i++){
cout<<data[i]<<" "; //输出具体的全排列
}
cout<<endl;
num++;
}
else{
for(int i=begin;i<=end;i++){
swap(data[begin],data[i]);
search(begin+1,end,data);
swap(data[begin],data[i]);
}
}
return num;
}
int main(){
int data[7]={0,1,2,3,4,5,6};
cout<<search(1,3,data);
return 0;
}