回溯求解全排列
有趣的三位数。有这样三个三位数,
它们的比例正好为1比2比3,并
且1到9的每一个数字都正好只用了一个,
求出所有满足条件的三位数组合
#include<bits/stdc++.h>
using namespace std;
int a[10] = {1,2,3,4,5,6,7,8,9};
int c;
void dfs(int id){ //回溯是深度优先搜索的一种 //id 上面数组的下标
if(id >= 9){ //全排列实现一次
int x ,y ,z;
x = a[0] * 100 + a[1] * 10 + a[2];
y = a[3] * 100 + a[4] * 10 + a[5];
z = a[6] * 100 + a[7] * 10 + a[8];
if( x * 2 == y && x * 3 == z ){
c++;
cout<<x<<" "<<y<<" "<<z<<endl;
}
return ;
} else {
int j;
for(int i = id ; i < 9 ;i++ ){
j = a[i];a[i] = a[id];a[id] = j;
dfs(id+1);
j = a[i];a[i] = a[id];a[id] = j;
}
}
}
int main(){
ios::sync_with_stdio(0);
dfs(0); //下标从0开始
cout<<c<<endl;
return 0;
}