#include<iostream> #include<vector> #include<algorithm> #include<iomanip> #include<string> #include<cmath> using namespace std; vector<string> goods = { "ABDE", "ABC", "BCEF", "ADG", "BDEFH", "CFI", "DEGH", "GHI", "EFHI" }; //vector<string> goods = { "BDEFH", "ABDE", "BCEF", "DEGH", "EFHI", "ABC", "ADG", "CFI", "GHI" }; vector<int> ans; bool dfs(vector<int>& require, vector<int>& temp, vector<int>& res) { int sum = 0; for (int i = 0; i < temp.size(); i++) { sum += temp[i] + require[i]; } if (sum > 36) return false; int flag = 0; for (int i = 0; i < temp.size(); i++) { if ((temp[i] + require[i]) % 4 != 0) { flag = 1; break; } } if (flag == 0) { for (int i = 0; i < res.size(); i++) { while (res[i]) { ans.push_back(i + 1); res[i]--; } } return true; } for (int i = 0; i < 9; i++) { if (res[i] > 1) continue; for (int j = 0; j < goods[i].size(); j++) { temp[goods[i][j] - 'A']++; } res[i]++; if(dfs(require, temp, res)) return true; for (int j = 0; j < goods[i].size(); j++) { temp[goods[i][j] - 'A']--; } res[i]--; } return false; } int main() { vector<int> require(9); for (int i = 0; i < 9; i++) cin >> require[i]; vector<int> temp(9); vector<int> res(9); dfs(require, temp, res); //int kind = 2; //for (int n1 = 0; n1 < kind; n1++) { //} for (int i = 0; i < ans.size(); i++) { cout << ans[i] << " "; } } |
Double click to view unformatted code.