POJ 1753(枚举)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 using namespace std;
10 char a[6][6];
11 int flag,mi;
12 int dir[6][2]={0,0,-1,0,1,0,0,-1,0,1};
13 int judge()
14 {
15     for(int i=0;i<4;i++)
16     {
17         for(int j=0;j<4;j++)
18         {
19             if(a[i][j]!=a[0][0])
20             return 0;
21         }
22     }
23     return 1;
24 }
25 void fanpai(int x,int y)
26 {
27     int p,q;
28     if(a[x][y]==‘b‘)
29         a[x][y]=‘w‘;
30     else
31         a[x][y]=‘b‘;
32     if (x-1>=0)
33         if (a[x-1][y]==‘b‘)
34         a[x-1][y]=‘w‘;
35     else    a[x-1][y]=‘b‘;
36     if (x+1<4)
37        if (a[x+1][y]==‘b‘)
38         a[x+1][y]=‘w‘;
39     else    a[x+1][y]=‘b‘;
40     if (y-1>=0)
41        if (a[x][y-1]==‘b‘)
42         a[x][y-1]=‘w‘;
43     else    a[x][y-1]=‘b‘;
44     if (y+1<4)
45         if (a[x][y+1]==‘b‘)
46         a[x][y+1]=‘w‘;
47     else    a[x][y+1]=‘b‘;
48     /*
49     for(int i=0;i<5;i++)
50     {
51         p=x+dir[i][0];
52         q=y+dir[i][1];
53         if(p>=0&&p<4&&q>=0&&q<4)
54         {
55             if(a[p][q]==‘b‘)
56                 a[p][q]==‘w‘;
57             else
58                 a[p][q]==‘b‘;
59         }
60     }*/
61 }
62 void dfs(int x,int y,int coun)
63 {
64     if(judge())
65     {
66         flag=1;
67         mi=min(mi,coun);
68         return;
69     }
70     if(x>=4||y>=4) return;
71     int nx,ny;
72     nx=(x+1)%4;
73     ny=y+(x+1)/4;
74     dfs(nx,ny,coun);
75     fanpai(x,y);
76     dfs(nx,ny,coun+1);
77     fanpai(x,y);
78     return;
79
80 }
81 int main(int argc, char *argv[])
82 {
83
84     for(int i=0;i<4;i++)
85         scanf("%s",a[i]);
86     flag=0;mi=9999999;
87     dfs(0,0,0);
88     if(flag)
89     printf("%d\n",mi);
90     else
91     printf("Impossible\n");
92     return 0;
93 }

原文地址:https://www.cnblogs.com/huluxin/p/9759701.html

时间: 2024-07-28 12:55:48

POJ 1753(枚举)的相关文章

POJ 1753 (枚举+DFS)

Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40632   Accepted: 17647 Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the

poj 1753 枚举+暴搜

很基础的题,但是有很多种搜索姿势,感觉用来入门还是很好的. 题意:有一个4*4的棋盘,棋盘上有黑白格,每一次你可以翻其中的一个格子.一个格子(x,y)如果被翻,它相邻的前后左右四个格子(如果在棋盘上)也要翻转.现在给你一个初始的棋盘状态,问把这个棋盘翻转到全黑或全白的最少次数:若不能达到全黑或全白,输出Impossible. 只有4*4的棋盘,同时格子只有黑白两面.对于同一个格子,翻两次和不翻没有区别.很小的数据量,就是引导人状压之后去暴力做的.但是你可以枚举全部65536种状态不断更新答案:也

[ACM训练] 算法初级 之 基本算法 之 枚举(POJ 1753+2965)

先列出题目: 1.POJ 1753 POJ 1753  Flip Game:http://poj.org/problem?id=1753 Sample Input bwwb bbwb bwwb bwww Sample Output 4 入手竟然没有思路,感觉有很多很多种情况需要考虑,也只能使用枚举方法才能解决了吧~ 4x4的数组来进行数据存储的话操作起来肯定非常不方便,这里借用位压缩的方法来存储状态,使用移位来标识每一个位置的的上下左右的位置操作. 详细看这里. 1.当棋盘状态id为0(全白)或

POJ 1753 Flip Game(dfs+枚举)

POJ 1753 题意: 输入一个4*4的图像,由黑白两色组成,定义一种操作为:改变某个格子内小球的颜色(黑变白,白变黑),同时其上下左右的格子内小球也将变色.求最少多少次操作能使之成为纯色图案. 思路: 对一个格子操作偶数次等于没有操作,操作奇数次等于操作一次,所以答案在0~16以及impossible之间. 从n=0开始枚举n次操作可能的组成情况,即操作哪几个格子,若某种组合能变图案为纯色则停止. 由于总组合数达到2^16,故枚举组合情况可以用dfs来进行回溯枚举. //还有一种方法是位运算

POJ 1753 Flip Game (DFS + 枚举)

题目:http://poj.org/problem?id=1753 这个题在开始接触的训练计划的时候做过,当时用的是DFS遍历,其机制就是把每个棋子翻一遍,然后顺利的过了,所以也就没有深究. 省赛前一次做PC2遇到了几乎一模一样的题,只不过是把棋盘的界限由4X4改为了5X5,然后一直跑不出结果来,但是当时崔老湿那个队过了,在最后总结的时候,崔老湿就说和这个题一样,不过要枚举第一行进行优化. 我以为就是恢复第一行然后第二行以此类推,不过手推一下结果是6不是4,就知道这个有问题. 问了崔老湿,问了+

poj 1753 Flip Game (bfs + 枚举)

链接:poj 1753 题意:这是翻棋游戏,给定4*4棋盘,棋子一面为黑色(用b表示),另一面为白色(用w表示),问至少要几步可以将棋子翻为全黑或者全白,如不能达到目的,输出"Impossible " 翻转规则:可以选定16个棋子中的任意一个,将其本身以及上下左右相邻的翻转过来 分析:其实每格棋子最多只可以翻转一次(实际是奇数次,但与翻转一次状态一样),只要其中一格重复翻了2次(不论是连续翻动还是不连翻动),那么它以及周边的棋子和没翻动时的状态是一致的,与最初状态未翻转一样,由此就可以

POJ 1753 Flip Game (高斯消元 枚举自由变元求最小步数)

题目链接 题意:4*4的黑白棋,求把棋全变白或者全变黑的最小步数. 分析:以前用状态压缩做过. 和上题差不多,唯一的不同是这个终态是黑棋或者白棋, 但是只需要把给的初态做不同的两次处理就行了. 感觉现在还只是会套模板,不能独立的思考,好伤心.... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath&g

[ACM] POJ 1753 Flip Game (枚举,BFS,位运算)

Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29921   Accepted: 12975 Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the

【POJ 1753】Flip Game

[POJ 1753]Flip Game 二进制+(BFS)暴力枚举 原本用二位字符数组存 发现遍历困难 并且翻动棋子也难办 后来想到一维线性 下标 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 在图中即为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 预处理出一个数组进行翻转 后来又发现预处理难办 灵光一现 由于只有黑白两色 可用1 0标记 看到1 0想到的当然就是二进制了 并且又做成了个线性 刚好16位二进制 一切迎刃而解 翻转可