博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3368 曾经下过的棋
阅读量:4552 次
发布时间:2019-06-08

本文共 1439 字,大约阅读时间需要 4 分钟。

题目链接:

就是讲一种下棋的方法,很多人小时候也应该玩过,输入8*8的矩阵代表棋盘,*代表空位

D代表黑子,L代表白子,现在你手里只有一颗黑子,问你把这颗黑子放在哪里能够吃掉最多的白子

当一个方向上(斜方向也算)首尾都是黑子的时候它中间的白子当然就会被吃掉。

因为只有8*8的大小,所以可以枚举每一个棋子的八个方向统计能够吃多少个白子,类似于DFS

起初想的是枚举每个黑子,但是后来发现了漏掉了类似于D L L * L L D的情况 而且要改貌似有点麻烦

                                                                               L L L

                                                                            D   D    D

索性就换成了枚举每个*的位置 这样的好处是不会漏掉特殊情况,也比较简短

 

1 #include
2 #include
3 using namespace std; 4 int yi[8][2]={
{
1,1},{
1,0},{
1,-1},{
0,1},{
0,-1},{-1,1},{-1,0},{-1,-1}}; //列举八个方向 5 char map[10][10]; 6 int x,y,sum,m,i,j,k; 7 void dfs(int s) 8 { 9 if (x<0||x>8||y<0||y>8||map[x][y]=='*') return ;10 if (map[x][y]=='L') {s++; } //统计这一个方向白子的个数11 if (map[x][y]=='D') {m+=s; return ;} //每个方向上的个数加在一起12 x=x+yi[k][0];13 y=y+yi[k][1];14 dfs(s);15 }16 int main()17 {18 int n,cut=0;19 scanf("%d",&n);20 while (n--)21 {22 cut++;23 sum=0;24 for (i=0;i<8;i++)25 scanf("%s",&map[i]);26 for (i=0;i<8;i++)27 for (j=0;j<8;j++)28 {29 m=0;30 if (map[i][j]=='*')31 {32 for (k=0;k<8;k++)33 {34 x=i+yi[k][0];//枚举八个方向35 y=j+yi[k][1];36 dfs(0);37 }38 }39 if (m>sum) sum=m;40 }41 printf("Case %d: %d\n",cut,sum);42 }43 return 0;44 }

 

  

转载于:https://www.cnblogs.com/JJCHEHEDA/p/4664879.html

你可能感兴趣的文章
linux 安装 git
查看>>
Margin
查看>>
完成登录与注册页面的前端
查看>>
centos 源码安装php7
查看>>
Log4j详细教程
查看>>
UVa-1368-DNA序列
查看>>
ConfigParser模块
查看>>
如何开发优质的 Flutter App:Flutter App 软件测试指南
查看>>
决胜Flutter 第一章 熟悉战场
查看>>
如何开发优质的 Flutter App:Flutter App 软件调试指南
查看>>
决胜经典算法之冒泡排序
查看>>
决胜经典算法之选择排序
查看>>
11、求二进制中1的个数
查看>>
【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--请求处理结果适配篇(7/8)...
查看>>
CodeForces 731A Night at the Museum
查看>>
MySQL 删除数据库
查看>>
JavaScript 字符串(String) 对象
查看>>
How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
查看>>
微信小程序picker组件 - 省市二级联动
查看>>
Dynamics CRM 给视图配置安全角色
查看>>