问题:1~9的9个数字,每个数字只出现一次,要求:第一位能被1整除,前两位能被2整除,。。。前9位能被9整除。
思路:回溯法的简单例子。
#include<iostream>
#include<vector>
using namespace std;
int visited[10]={0};//记录版——0
vector<int> iVec;
void func(int a, int len){
if(len==9 && a%9==0){//终止条件——1
iVec.push_back(a);
return ;
}
for(int i=1;i<=9;++i){
if(!visited[i] && (a*10+i)%(len+1)==0 ){//可行条件——2
visited[i]=1;//尝试——3
func(a*10+i,len+1);
visited[i]=0;//回溯——4
}
}
return ;
}
int main(){
func(0,0);
for(vector<int>::iterator iter=iVec.begin();
iter!=iVec.end();++iter)
cout<<*iter<<endl;
return 0;
}