回溯
查看原帖
回溯
331168
王小强楼主2021/8/16 10:03
#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

const int N = 9;

void show_me_the_answer(vector<int>& candidates) {
  int num1 = candidates[0] * 100 + candidates[1] * 10 + candidates[2];
  int num2 = candidates[3] * 100 + candidates[4] * 10 + candidates[5];
  int num3 = candidates[6] * 100 + candidates[7] * 10 + candidates[8];
  if (num1 * 2 == num2 && num1 * 3 == num3)
    cout << num1 << ' ' << num2 << ' ' << num3 << endl; 
}

void backtracking(vector<int>& nums, vector<int>& candidates, vector<int>& used) {
  if (candidates.size() == nums.size()) {
    show_me_the_answer(candidates);
    return;
  }
  for (int i = 0; i < nums.size(); ++i) {
    if (used[i]) continue;
    used[i] = 1;
    candidates.emplace_back(nums[i]);
    backtracking(nums, candidates, used);
    candidates.pop_back();
    used[i] = 0;
  }
}

int main(int argc, char const *argv[]) {
  vector<int> nums(N), used(N), candidates;
  iota(begin(nums), end(nums), 1);

  backtracking(nums, candidates, used);
  return 0;
}
2021/8/16 10:03
加载中...