poj 1753 Flip Game
2015-08-31 15:29
381 查看
原题链接:http://poj.org/problem?id=1753
数据很小直接爆搜。。
数据很小直接爆搜。。
[code]#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<vector> #include<map> using std::min; using std::find; using std::pair; using std::swap; using std::vector; using std::multimap; #define pb(e) push_back(e) #define sz(c) (int)(c).size() #define mp(a, b) make_pair(a, b) #define all(c) (c).begin(), (c).end() #define iter(c) __typeof((c).begin()) #define cls(arr, val) memset(arr, val, sizeof(arr)) #define cpresent(c, e) (find(all(c), (e)) != (c).end()) #define rep(i, n) for(int i = 0; i < (int)n; i++) #define tr(c, i) for(iter(c) i = (c).begin(); i != (c).end(); ++i) const int N = 1000000; const int INF = 0x3f3f3f3f; bool vis[N >> 2]; struct Node { int s; bool mat[4][4]; }que ; const int dx[] = { 0, 0, 0, -1, 1, }, dy[] = { 0, -1, 1, 0, 0, }; inline int hash(Node &x) { int ret = 0, k = 1; rep(i, 4) { rep(j, 4) { ret += k * x.mat[i][j]; k <<= 1; } } return (ret + N) % N; } void bfs() { int lb = 0, ub = 1, v = hash(que[0]); if(!v || v == 65535) { puts("0"); return; } que[0].s = 1, cls(vis, false), vis[v] = true; while(lb != ub) { Node &x = que[lb++]; rep(i, 4) { rep(j, 4) { Node t = x; rep(k, 5) { int nx = dx[k] + i, ny = dy[k] + j; if(nx < 0 || nx > 3 || ny < 0 || ny > 3) continue; t.mat[nx][ny] ^= 1; } t.s = x.s + 1; v = hash(t); if(!v || v == 65535) { printf("%d\n", x.s); return; } if(vis[v]) continue; vis[v] = true; que[ub++] = t; } } } puts("Impossible"); } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w+", stdout); #endif char buf[10]; while(~scanf("%s", buf)) { rep(i, 4) { if(i) scanf("%s", buf); rep(j, 4) { que[0].mat[i][j] = buf[j] == 'b' ? 1 : 0; } } bfs(); } return 0; }
相关文章推荐
- C++中new和delete比 malloc和free有哪些优点?
- Knockout应用开发指南 第十章:更多信息(完结篇)
- js之事件冒泡和事件捕获
- 问题:c# newtonsoft.json使用;结果:Newtonsoft.Json 用法
- 滚屏加载--jQuery+PHP实现浏览更多内容
- uva 11468-Substring ac自动机 + 记忆化搜索
- vim复制,粘贴,删除,撤销,替换,光标移动等用法
- UML类图关系对应代码
- tomcat之server.xml介绍
- Unity3D中使用MiniJson解析json的例子
- 九度oj 1189
- 堆和栈的区别
- Knockout应用开发指南 第九章:高级应用举例
- 元素移除——计蒜客(9)
- FROM USE CASES TO TEST CASES
- linux设置自动获取IP地址
- sql语句实现四种九九乘法表
- 【代码片段】javascript上传文件并预览
- openJDK开源项目列表
- 企业网络的安全接入