POJ 3279 搜索
来源:互联网 发布:骇战网络暴力 编辑:程序博客网 时间:2024/05/16 14:02
给出最高15*15的0 1矩阵,每次可以翻转一个点,其相邻的4个点都被翻转,问最少翻转几次可以全部变为0
题中要求的字典序根本不用考虑。。。
枚举第一行的翻转所有翻转情况然后逐行向下更新即可,因为第一行确定后,后面的都有唯一解
#include "stdio.h"#include "string.h"int n,m;int vis[21][21],b[21][21],a[21][21],pri[21][21];void on(int x,int y){ b[x][y]^=1; if (x-1>=0) b[x-1][y]^=1; if (y-1>=0) b[x][y-1]^=1; b[x+1][y]^=1; b[x][y+1]^=1;}int main(){ int ok,ans,sum,cnt,i,j,w,key,flag; while (scanf("%d%d",&n,&m)!=EOF) { for (i=0;i<n;i++) for (j=0;j<m;j++) scanf("%d",&a[i][j]); cnt=(1<<m)-1; ans=0x7fffffff; ok=0; for (w=0;w<=cnt;w++) { memset(vis,0,sizeof(vis)); memcpy(b,a,sizeof(a)); sum=0; for (i=0;i<m;i++) { key=w&(1<<i); if (key!=0) { sum++; on(0,i); vis[0][i]=1; } } for (i=1;i<n;i++) { if (sum>=ans) break; for (j=0;j<m;j++) if (b[i-1][j]==1) { on(i,j); vis[i][j]=1; sum++; if (sum>=ans) break; } } if (sum>=ans || i!=n) continue; flag=1; for (j=0;j<m;j++) if (b[n-1][j]==1) {flag=0; break;} if (flag==1 && sum<ans) { ok=1; ans=sum; memcpy(pri,vis,sizeof(vis)); } } if (ok==0) printf("IMPOSSIBLE\n"); else { for (i=0;i<n;i++) { printf("%d",pri[i][0]); for (j=1;j<m;j++) printf(" %d",pri[i][j]); printf("\n"); } } } return 0;}
0 0
- POJ 3279 搜索
- poj 3279 Fliptile(搜索)
- POJ 3279 Fliptile (搜索)
- POJ 3279 二进制搜索
- POJ-3279(Fliptile)--简单搜索
- POJ 3279 搜索(反转)
- 不懂 POJ 3279-Fliptile【搜索】
- POJ 3279 Fliptile(普通搜索)
- POJ 3279 Fliptile(状压搜索)
- POJ 3279 Fliptile (二进制+搜索)
- 【POJ 3279】Fliptile(状压DP+搜索)
- POJ 3279Fliptile(状态枚举+搜索)
- POJ搜索题目总结
- POJ 2976 参数搜索
- 简单搜索1979@POJ
- 广度搜索-POJ 1753
- POJ搜索题目
- POJ - 1011 搜索剪枝
- shell中引用
- 查询整点的SQL语句
- 同步函数与异步函数
- 【图像处理】【去模糊】图像去模糊之初探--Single Image Motion Deblurring
- 对STM32 ADC单次转换模式 连续转换模式 扫描模式的理解
- POJ 3279 搜索
- git只跟踪指定的几个文件夹
- AsyncTask使用的要点知识
- Android 动画技术
- IOS修改titleView的字体颜色
- 结构体在内存中的存储方式
- 小球弹跳:UI2-2
- dark认为比较好比较全的java反射详解示例
- C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)