poj 1753
来源:互联网 发布:邯郸seo 编辑:程序博客网 时间:2024/05/09 04:21
每个位置翻转2次相当于没翻,另外每个位置翻转的时机不影响最终结果,所以枚举每个位置的状态翻还是没翻,一共2^16次递归
#include<iostream>#include <string> #include<vector>#include<algorithm>#include<set>#include<cmath>using namespace std;#define lch(i) ((i)<<1)#define rch(i) ((i)<<1|1)#define sqr(i) ((i)*(i))#define pii pair<int,int>#define mp make_pair#define FOR(i,b,e) for(int i=b;i<=e;i++)#define ms(a)memset(a,0,sizeof(a))const int maxnum = 10005;int mat[4][4];bool vis[4][4];int nxt[4][2]={{-1,0},{0,1},{1,0},{0,-1}};void flip(int x,int y){mat[x][y]=1-mat[x][y];FOR(i,0,3){if((x+nxt[i][0])>=0&&(x+nxt[i][0])<4&&(y+nxt[i][1])>=0&&(y+nxt[i][1])<4){mat[x+nxt[i][0]][y+nxt[i][1]]=1-mat[x+nxt[i][0]][y+nxt[i][1]];}}/*printf("\n");FOR(i,0,3){FOR(j,0,3){printf("%d",mat[i][j]);}printf("\n");}*/}bool check(){int sum=0;FOR(i,0,3){FOR(j,0,3){sum+=mat[i][j];}}if (sum==0||sum==16){return true;}return false;}int mintime=100;void enumM(int n,int times){if(n==16)return;enumM(n+1,times);flip(n/4,n%4);if(check()){mintime=min(mintime,times);}enumM(n+1,times+1);flip(n/4,n%4);}int main(){char ch;FOR(i,0,3){FOR(j,0,3){scanf("%c",&ch);if(ch=='w')mat[i][j]=0;elsemat[i][j]=1;}scanf("%c",&ch);}ms(vis);if(check()) printf("0\n");else{enumM(0,1);if(mintime>16)printf("Impossible\n");else printf("%d\n",mintime);}}
0 0
- poj 3279 poj 1753
- POJ 1753
- poj&&1753
- poj 1753
- poj 1753
- POJ-1753
- poj-1753
- poj 1753
- poj 1753
- poj 1753
- POJ 1753
- POJ 1753
- poj 1753
- poj-1753
- POJ 1753
- POJ 1753
- POJ 1753
- poj 1753
- 例题8-2 联合国大楼 UVa 1605
- 二叉树的非递归遍历
- 黑马程序员—this关键字及单例设计模式
- 详细分析内存泄露
- d3.js学习笔记(二) 柱形图
- poj 1753
- 黑马程序员---成长之路-----OC之基础篇OC的概述
- Thinkphp 加载类库import()方法
- java 作用域 public private default protected 的差别
- 银子暴涨
- iOS编程------集合视图之瀑布流WaterFlowLayout
- Swift简单语法
- Java集合总结之Collection整体框架
- iOS开发分分钟搞定C语言 —— 函数