lightsoff游戏-lightsoff

lightsoff游戏-lightsoff
浏览 (960)
  • 类型:
  • 更新:2024-07-17
  • 大小:294M
  • 所需权限:查看
  • 隐私政策:查看
即可 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include #include using namespace std; vector> board; int m, n; void flip(int i, int j) { for (int x = max(i - 1, 0); x <= min(i + 1, m - 1); x++) { for (int y = max(j - 1, 0); y <= min(j + 1, n - 1); y++) { // 更新(i, j)周围的灯泡状态 boardxy = !boardxy; } } } // 状态压缩寻找解法 void lightsoff() { int minSteps = INT_MAX; int sol = -1; int limit = 1 << n; // 枚举第一行的 2^n 种状态 for (int i = 0; i < limit; i++) { // 每次枚举第一行的状态,每个状态都有相应的步数 int steps = 0; for (int j = 0; j < m; j++) { // 根据第一行的状态,更新后面 m-1 行的状态 for (int k = 0; k < n; k++) { if (i >> k & 1) { // 判断第一行的第 k 个灯泡是开还是关 if (j == 0) { // 若是第一行,则直接翻转对应列的灯泡 flip(j, k); steps++; } else if (boardj - 1k == 0) { // 判断第 j-1 行的第 k 个灯泡是否为 0,若是则翻转该灯泡 flip(j, k); steps++; } } } if (j == m - 1) { // 判断最后一行是否都是 1,若是则代表找到一种解法 bool flag = true; for (int x = 0; x < n; x++) { if (boardjx == 0) { flag = false; break; } } if (flag) { // 若最后一行均为 1,比较 step 是否为最小值 if (steps < minSteps) { minSteps = steps; sol = i; // 解法为第一行的状态 } } } } } cout << "Minimum steps: " << minSteps << endl; cout << "Solution: "; for (int i = 0; i < n; i++) { if (sol >> i & 1) { // 输出解法 cout << 1 << " "; } else { cout << 0 << " "; } } cout << endl; } // 主函数 int main() { cin >> m >> n; board = vector>(m, vector(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> boardij; } } lightsoff(); return 0; }
安卓版下载

同类推荐更多

专题合集更多>>

孤单枪手2手机版简体中文版下载-孤单枪手2手机版简体中文版 魔幻大陆之三圣神之旅手游官网最新版下载-魔幻大陆之三圣神之旅手游官网最新版 飞鱼crm系统官网-飞鱼crm系统 织里云仓app邀请码是多少-织里云仓