#include <iostream>
#include <cstring>
using namespace std;
// 邻接格子的坐标
const int dx[5] = {-1, 0, 0, 0, 1};
const int dy[5] = {0, -1, 0, 1, 0};
const int MAX_M = 16;
const int MAX_N = 16;
int M, N;
int tile[MAX_M][MAX_N];int opt[MAX_M][MAX_N]; // 保存最优解
int flip [MAX_M][MAX_N]; // 保存中间结果// 查询(x, y)的颜色
int get(int x, int y)
{int c = tile[x][y];for (int d = 0; d < 5; d++){int x2 = x + dx[d], y2 = y + dy[d];if (x2 >= 0 && x2 < M && y2 >= 0 && y2 < N){c += flip[x2][y2];}} return c % 2;
}// 求出第1行确定情况下的最小操作次数
int calc()
{// 求出从第2行开始的翻转方法for (int i = 1; i < M; i++)for (int j = 0; j < N; j++){if (get(i - 1, j) != 0){// 如果同列的上一行为黑色,则必须翻转,因为此后,只有该点的翻转可以改变正上方的棋子颜色了flip[i][j] = 1; }}// 判断最后一行是否空白for (int j = 0; j < N; j++)if (get(M - 1, j)) // 无解 return -1;//统计翻转的次数int res = 0;for (int i = 0; i < M; i++)for (int j = 0; j < N; j++)res += flip[i][j];return res;
} void solve()
{int res = -1;memset(opt, 0, sizeof(opt));// 按照字典序开始尝试第一行所有的可能性for (int i = 0; i < 1 << N; i++){memset(flip, 0, sizeof(flip)); // 每次必须重新清空flip for (int j = 0; j < N; j++){flip[0][N - 1 - j] = i >> j & 1;}int num = calc();if (num >= 0 && (res == -1 || res > num)){res = num;memcpy(opt, flip, sizeof(flip));}} if (res == -1) cout << "IMPOSSIBLE" << endl;else{for (int i = 0; i < M; i++){for (int j = 0; j < N - 1; j++)cout << opt[i][j] << " ";cout << opt[i][N - 1] << endl;}}
}int main()
{while (cin >> M >> N){for (int i = 0; i < M; i++)for (int j = 0; j < N; j++)cin >> tile[i][j];solve();}return 0;
}

转载于:https://www.cnblogs.com/mofushaohua/p/7789499.html

poj3279 Fliptile相关推荐

  1. poj3279 Fliptile(翻转棋盘)

    Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...

  2. kuangbin 专题一 简单搜索

    kuangbin 专题一 简单搜索 1.POJ1321棋盘问题[DFS] 代码 自己的想法 2.POJ2251Dungeon Master[三维空间BFS] 代码 自己的想法 3.POJ3278 Ca ...

  3. (POJ-3279)Fliptile (dfs经典---也可以枚举)

    Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...

  4. POJ 3279(Fliptile)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...

  5. D - Fliptile POJ - 3279(翻转问题)

    D - Fliptile POJ - 3279 题意: 给一个m*n的01矩阵,对某一块砖踩一脚,1->0 || 0->1, 求将整个举证全部变为0最少踩几次 典型的翻转问题,此类问题的特 ...

  6. Fliptile【搜索】

    Fliptile POJ - 3279 Farmer John knows that an intellectually satisfied cow is a happy cow who will g ...

  7. 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile

    原文:与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile [源码下载] 与众不同 windows phone (36 ...

  8. Fliptile 翻格子游戏[Usaco2007 Open]

    题目描述 Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. ...

  9. bzoj 1647: [Usaco2007 Open]Fliptile 翻格子游戏(枚举)

    1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 727  Solved: 287 ...

最新文章

  1. 我叫Java,2019年总结,大家请查收
  2. C的安装编译Error
  3. java logger 静态,java11教程--公共静态接口System.Logger
  4. 关于Increased rates of convergence through learning rate adaptation一文的理解
  5. 深度学习之自编码器(2)Fashion MNIST图片重建实战
  6. ActiviteX 服务控件
  7. 01数字基带信号及其频谱特性
  8. Diango博客--8.解锁博客侧栏
  9. 什么是数据库的三大范式?
  10. 2021暗月web渗透测试攻防全栈红队视频教程网络安全程师培训全系列学习心得分享
  11. 峰值信噪比和结构相似性
  12. Mbed TLS 编码规范
  13. 微信小程序游戏「跳一跳」高分秘籍
  14. 转载和积累系列 - linux 生成KEY的方法与使用
  15. pytorch dataset自定义_PyTorch | 数据加载及预处理教程
  16. QT 程序运行异常问题总结
  17. Qt学习之添加游戏音效
  18. k8s存储PV与PVC使用详解
  19. 微信公众号第三方平台投票
  20. Android Studio 运行项目显示 Unfortunately,xxxx has stopped.

热门文章

  1. 阅片机器人性能增8倍,帮电网大省钱:英特尔加速AI推理细节
  2. 傅立叶变换物理意义解析进阶
  3. locate mysql-server_Mysql问题
  4. c html canvas,HTML5 canvas
  5. 配置思路ensp_配置OSPF的Stub区域示例
  6. 学习编程做笔记的软件_可以在图片上做笔记的软件
  7. mvn test BUILD FAILURE
  8. 理解ReentrantLock的公平锁和非公平锁
  9. 027_JavaScript数组迭代
  10. 009_CSS分组选择器