hdu 4678 Mine(bfs+博弈)
2015-11-09 20:28
399 查看
题目链接:hdu 4678 Mine
解题思路
点击一个空白点后显示出的所有位置当作一个块,每个块可以当成一个子游戏,子游戏的SG和边有带数字点的个数有关,奇数时为2,偶数时为1。对于没有靠近空白块的点,本身就是一个子游戏,SG为1代码
#include <cstdio> #include <cstring> #include <queue> #include <vector> #include <algorithm> using namespace std; typedef pair<int,int> pii; const int maxn = 1005; const int dir[][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}; int N, M, K, G[maxn][maxn], T[maxn][maxn]; void init () { scanf("%d%d%d", &N, &M, &K); memset(G, 0, sizeof(G)); memset(T, 0, sizeof(T)); int u, v; for (int i = 0; i < K; i++) { scanf("%d%d", &u, &v); G[u][v] = -1; for (int j = 0; j < 8; j++) { int x = u + dir[j][0]; int y = v + dir[j][1]; if (x < 0 || x >= N || y < 0 || y >= M || G[x][y] == -1) continue; G[x][y] = 1; } } } queue<pii> Q; int bfs(int x, int y) { int ret = 0; Q.push(make_pair(x, y)); T[x][y] = 1; while (!Q.empty()) { x = Q.front().first; y = Q.front().second; Q.pop(); if (G[x][y]) { ret++; continue; } for (int i = 0; i < 8; i++) { int p = x + dir[i][0]; int q = y + dir[i][1]; if (p < 0 || p >= N || q < 0 || q >= M || T[p][q]) continue; Q.push(make_pair(p, q)); T[p][q] = 1; } } return ret&1 ? 2 : 1; } int main () { int cas; scanf("%d", &cas); for (int kcas = 1; kcas <= cas; kcas++) { init(); int ans = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (G[i][j] == 0 && T[i][j] == 0) ans ^= bfs(i, j); } } for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) if (G[i][j] == 1 && T[i][j] == 0) ans ^= 1; } printf("Case #%d: %s\n", kcas, ans ? "Xiemao" : "Fanglaoshi"); } return 0; }
相关文章推荐
- 基于Dubbo框架构建分布式服务(顶)
- TS科普8 传输流编码构造与参数
- Java中二叉树的建立
- BZOJ 1787: [Ahoi2008]Meet 紧急集合 LCA
- 创业的路上,女子并不让须眉!
- 数据库 数据丢失问题 及解决方案
- OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口)
- hdu 3500 Fling (DFS+方法)
- UiTextView的提示文字效果
- VC中调用dll类的方法
- Qt从零开始制作串口调试助手-(第三章、菜单栏和工具栏添加)-Creator_Ly
- Unity 使用 Protobuf-net
- HDU 1870 愚人节的礼物
- gulp
- 谈Dubbo服务框架(顶)
- 4,Xcode的调试
- C++设计模式[八]装饰模式
- swift中的类和结构
- 继承与接口动手动脑
- webForm练习1(地区导航)