第三题:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void dfs(vector<int> & flags,int start,vector<string> & ans,string tmp) {
if (start == flags.size()) {
ans.push_back(tmp);
return;
}
dfs(flags,start+1,ans,tmp+to_string(start));
if(flags[start] == 0)
dfs(flags, start + 1, ans, tmp);
}
int main(void) {
int tmp;
while(cin>>tmp) {
vector<int> flags;
vector<string> ans;
flags.push_back(tmp);
for (int i = 1; i < 10;++i) {
cin >> tmp;
flags.push_back(tmp);
}
dfs(flags, 0, ans, "");
sort(ans.begin(),ans.end());
for (auto x : ans)
cout << x << endl;
}
}
使用了backtrace,注意解空间是类似于二叉树,当然也可以使用数组的解空间,但是比较繁琐。