两颗黑子之间的白子可以翻装成黑子,两颗白子之间的黑子可以翻转成白子,对于一个给定位置,有八个方向有翻转其他颜色的子的可能。规则之一是下棋的位置一定要能翻转对方的子。

求最优情况:黑子能翻转的白子个数的最大值。只要对有限的位置进行搜索就行,搜索8*8的位置,每个位置搜索八个方向,每个方向分别计算白子数量,直到遇到黑子,计算八个方向翻转

的白子的和,更新最大值。

下面两种代码稍有不同,当设置图的坐标为[1,8]*[1,8]时,边界可以不用管,当坐标是[0,7]*[0,7]时需要检查是否越界。

 /*171ms 1376k*/
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
char map[][];
int kase,t;
int sum;
int MAX;
int dir[][]{{,},{-,},{,},{,-},{,},{,-},{-,},{-,-}};
int dfs(int x,int y)
{
sum=;
int xx,yy;
for(int i=;i<;i++)
{
int num=;//每个搜索方向开始时翻转白子的数量都置零
xx=x+dir[i][];
yy=y+dir[i][];
while(map[xx][yy]=='L')
{
num++;
xx+=dir[i][];
yy+=dir[i][];
}
if(map[xx][yy]=='D')sum+=num;//八个方向翻转的白子总和
}
return sum;
}
int main()
{
scanf("%d",&t);
for(kase=;kase<=t;kase++)
{
int MAX=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
scanf(" %c",&map[i][j]);}//要根据全局地图来判断max,所以先保存map,不能边存边计算
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
if(map[i][j]=='*')
{
MAX=max(MAX,dfs(i,j));
}
}
printf("Case %d: %d\n",kase,MAX);
}
}
 #include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a) memset(a,0,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define pb(i) push_back(i)
#define ppb(x) pop_back(x)
#define maxn 8
int n,m,t;
int Map[maxn][maxn];
int dir[][]={{,},{,-},{,},{-,},{,},{,-},{-,},{-,-}};
int dfs(int x,int y)
{
int cnt=;
int xx,yy;
f(i,,)
{
int tot=;
int xx=x+dir[i][];
int yy=y+dir[i][];
if(xx>=||xx<||yy<||yy>=)continue;
while((xx+dir[i][])<=&&(xx+dir[i][])>=&&(yy+dir[i][])<=&&(yy+dir[i][])>=&&Map[xx][yy]=='L')
{
tot++;
xx+=dir[i][];
yy+=dir[i][];
}
if(Map[xx][yy]=='D')cnt+=tot;
}
return cnt;
}
int ans;
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
scan(n);
f(tt,,n)
{
ans=;
f(i,,)
f(j,,)
{
scanf(" %c",&Map[i][j]);
}
f(i,,)
f(j,,)
{
if(Map[i][j]=='*')
ans=max(ans,dfs(i,j));
}
pf("Case %d: %d\n",tt,ans);
}
}

hdu3368 dfs 下棋的更多相关文章

  1. hdu3368之DFS

    Reversi Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  2. 2019 深信服 下棋(DFS+回溯)

    链接:https://www.nowcoder.com/questionTerminal/a0feb0696e2043a5b3b0779fa861b64a?f=discussion来源:牛客网 8x8 ...

  3. HDU 2553 N皇后问题【棋盘型DFS】

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. CCF(棋局评估)博弈论+对抗搜索+DFS

    201803-4 棋局评估 这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数. #include<iostream> #include< ...

  5. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  6. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  7. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  8. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  9. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

随机推荐

  1. 重大改革!Python,最接近人工智能的语言~将被加入高考科目!

    就在前几天,和一位浙江省高校的信息技术老师聊天,我得到了一个震惊的消息: 明年,浙江省信息技术教材将不会在使用晦涩难懂的VB语言,而是改学更简单易懂的Python语言.也就是说, Python语言将纳 ...

  2. VUE实现Studio管理后台(一):鼠标拖放改变窗口大小

    近期改版RXEditor,把改版过程,用到的技术点,记录下来.昨天完成了静态页面的制作,制作过程并未详细记录,后期已经不愿再补了,有些遗憾.不过工作成果完整保留在github上,地址:https:// ...

  3. 基于google earth engine的中等分辨率全国水质反演

    我写博客的工作不像论文,假大空,我们直接上干货,之所以取一个这么大的名字,当然是我们能做到的... 不多说,我们对全国水体进行水质参数反演,不用MODIS,太粗,我们直接用哨兵,这样就可以直接做到大型 ...

  4. 组件化思路:以selection为例子,使用prop-types实现组件化控制,重用

    需求 书接上文,UI 积累之select section 这里又来两个需求了. 当我点击选择了option后,我应该看到的是我选择的option的内容 多例重用,即同样是个selection,我只是需 ...

  5. 【jQuery学习日记】jQuery实现滚动动画

    需要实现的效果 样式分析: 2个主要部分,头部的标题和导航部分,和主要的功能实现区域: 1.头部 <div id="header"> <h1>动漫视频< ...

  6. Django中的session的使用

    一.Session 的概念 cookie 是在浏览器端保存键值对数据,而 session 是在服务器端保存键值对数据 session 的使用依赖 cookie:在使用 Session 后,会在 Coo ...

  7. 斐讯k2

    降级方法 https://jingyan.baidu.com/article/ab69b27080990d2ca7189f0b.html 刷第三方固件方法 https://blog.csdn.net/ ...

  8. 复习笔记——1. C语言基础知识回顾

    1. 数据类型 1.1 基本数据类型 整型:int, long,unsigned int,unsigned long,long long-- 字符型:char 浮点型:float, double-- ...

  9. 整合Kafka+Flink 实例(第二部分 设计思路)

    前     言 拖了蛮久了,一直说要接着上一部分写设计思路以及代码,因为自己技术底子薄弱,加上人又懒,所以一直没能继续,今天补上设计思路及部分代码,后面有时间我会再补充一些应用性的功能,的确有些忙,希 ...

  10. 仿IntelliJ Darcula的Swing主题FlatLaf使用方法

    最近Sandeepin想写个基于Java Swing的RSS阅读器练练手,不过Swing默认主题太丑了,切成系统原生的主题也不是非常好看,正好感觉开发时用的IDEA主题很不错,不管是Light还是Da ...