Ancient Go---hdu5546(dfs爆搜CCPC题目)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5546

题意就是两个人下围棋,问在下一颗x是否能杀死o,‘.‘是空位子;

枚举所有的点,判断是否合法即可;

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
#include <stack>
#include <math.h>

using namespace std;

#define met(a, b) memset(a, b, sizeof(a))
#define N 103
#define INF 0x3f3f3f3f

typedef long long LL;

int dir[4][2] = { {1,0}, {-1,0}, {0,-1}, {0,1} };
char s[N][N];
int vis[N][N];

int OK(int x, int y)
{
    return (x<9 && y<9 && x>=0 && y>=0);
}

int check(int x, int y)
{
    vis[x][y] = 1;
    for(int i=0; i<4; i++)
    {
        int px = x+dir[i][0];
        int py = y+dir[i][1];
        if(!OK(px, py) || vis[px][py])continue;
        if(s[px][py] == ‘.‘)
            return 1;
        if(s[px][py] == ‘o‘ && check(px, py))
            return 1;
    }
    return 0;
}

int Judge(int x, int y)
{
    for(int i=0; i<4; i++)
    {
        int px = x + dir[i][0];
        int py = y + dir[i][1];
        if(!OK(px, py))continue;
        if(s[px][py] == ‘o‘)
        {
            met(vis, 0);
            if(!check(px, py))
                return 1;///不能走出去说明找到了;
        }
    }
    return 0;
}

int solve()
{
    for(int i=0; i<9; i++)
    {
        for(int j=0; j<9; j++)
        {
            if(s[i][j] == ‘x‘)continue;
            s[i][j] = ‘x‘;
            if(Judge(i, j))return 1;
            s[i][j] = ‘.‘;
        }
    }
    return 0;
}

int main()
{
    int T, t = 1;
    scanf("%d", &T);
    while(T--)
    {
        for(int i=0; i<9; i++)
        {
            scanf("%s", s[i]);
        }
        int ans = solve();
        if(ans) printf("Case #%d: Can kill in one move!!!\n", t++);
        else printf("Case #%d: Can not kill in one move!!!\n", t++);
    }
    return 0;
}

时间: 2024-10-27 07:54:46

Ancient Go---hdu5546(dfs爆搜CCPC题目)的相关文章

HDU 4403 A very hard Aoshu problem(dfs爆搜)

http://acm.hdu.edu.cn/showproblem.php?pid=4403 题意: 给出一串数字,在里面添加一个等号和多个+号,使得等式成立,问有多少种不同的式子. 思路: 数据量比较小,直接dfs爆搜答案即可. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<map> 6 using nam

hdu 5506 GT and set(dfs爆搜)

Problem Description You are given N sets.The i−th set has Ai numbers.You should divide the sets into L parts.And each part should have at least one number in common.If there is at least one solution,print YES,otherwise print NO. Input In the first li

Uva 10825 Anagram and Multiplication dfs 爆搜排列

题目链接:点击打开链接 题意: 给定m( 3<=m<=6), n ( 4<=n<=400) 构造一个m位n进制的数. 使得这个数*2, *3, *i ( 2<=i<=m)的结果是 这个数的排列组合. 如: m = 6, n = 10; 则 这个数可能为 142857 2*142857 = 285714 3*142857 = 428571 4*142857 = 571428 5*142857 = 714285 6*142857 = 857142 输出: 题目保证至多只有一

Ancient Go hdu5546 (DFS)

http://acm.hdu.edu.cn/showproblem.php?pid=5546 题意:现在Yu Zhou 和 Su Lu在下棋.Yu Zhou执黑子'x', Su Lu执白子'o'.下棋规则是这样的:若某一方能将另一方的(0<N)棋子全部围起来,则表示他吃了了这枚棋子.现在该Yu Zhou执黑子的走了,问他能不能在一步之内吃掉至少一枚白子. 分析:若白子周围有两个及其以上'.',那么黑子一定不能够吃掉白子.但需注意,几枚白子在一块的情况 #include <iostream>

【BZOJ-1060】时态同步 树形DP (DFS爆搜)

1060: [ZJOI2007]时态同步 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2101  Solved: 595[Submit][Status][Discuss] Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅 存在一条通路(通路指连接两个元件的导线序列).

Aizu 2306 Rabbit Party 爆搜顶点导出子图

题目链接:点击打开链接 题意: 给定n个点的完全图,下面给出m条边权不为0的边 下面m行给出边和边权. 其他的边边权都为0. 选择一个顶点导出子图,该子图的每个点点权为 该点连接的最小边权. 找一个这样的子图使得点权和最大,输出点权和. 思路: 因为是一个完全图,所以我们选择的点构成的图一定不包含权值为0的边.因为若包含了权值为0的边,则大可以把这两点删掉而不会减小答案. 所以我们选择的图中的边一定只 包含给出的m条边,且由这m条边构成的一个团. 再判断一下这个团中最多的点数,设最多有n个点,则

hdu5355 思维+爆搜

pid=5355">http://acm.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are?m?soda and today is their birthday. The?1-st soda has prepared?n?cakes with size?1,2,-,n. Now?1-st soda wants to divide the cakes into?m?parts so that the total

关于爆搜

关于爆搜 ? (这还用说,讲者太菜了) ? 爆搜通常是没有思路时一个 优秀 玄学的解题方法,但同样是搜索,我们所的分数却相差甚远,即搜索的优化问题; 前言 ? 这是很基础的东西,这里只作为回顾. ? 讲着实力不足,请不要D讲者; BFS ? BFS,广度优先搜索,用于逐层拓展的工具,可以有效地通过比较同一层之间的结果进行有效地减枝,而相比之下DFS的减枝就比较玄学,故能用BFS时,BFS的时间复杂度一般比DFS要低很多; ? BFS也是SPFA的实现基础 虽然SPFA已经死了 . ? BFS有双

CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

[编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色的. 你需要通过一系列操作使得最终每个点变成黑色.每次操作需要选择一个节点i,i必须是白色的,然后i到根的链上(包括节点i与根)所有与节点i距离小于k[i]的点都会变黑,已经是黑的点保持为黑.问最少使用几次操作能把整棵树变黑. 输入描述: 第一行一个整数n (1 ≤ n ≤ 10^5) 接下来n-1