zoukankan      html  css  js  c++  java
  • hdu3368 Reversi

    题意:一种翻转棋游戏,对当前的棋局,问黑子下一步最多能将几个白子翻为黑子,(当前黑子与原先棋盘中的黑子的连线中间的白子会翻成黑子)

    分析:很简单的搜索题,不过一开始一直WA,实在无语,一直忽略了一种很情况,就是下一个黑子之后,不一定至于棋盘中的一个黑子连成线,也可以是多个,这时候应该将白子数加起来,而不是求最大者,………………

    hdu3368
    #include<iostream>
    #include<algorithm>
    using namespace std;
    char g[10][10];
    int dir[8][2]={{1,0},{-1,0},{0,1},{0,-1},{-1,1},{-1,-1},{1,-1},{1,1}};
    bool check(int i,int j)
    {
    if(i<0 || i>7||j<0 || j>7)
    return false;
    return true;
    }
    int judge(int x,int y)
    {
    int c,sum=0;
    for(int k=0;k<8;k++)
    {
    c=0;
    int i=x+dir[k][0];
    int j=y+dir[k][1];
    if(check(i,j) && g[i][j]=='L')
    {
    c++;
    while(true)
    {
    i+=dir[k][0];
    j+=dir[k][1];
    if(check(i,j))
    {
    if(g[i][j]=='L')
    c++;
    else if(g[i][j]=='D')
    break;
    else if(g[i][j]=='*')
    {
    c=0;break;
    }
    }
    else {
    c=0;break;
    }
    }
    }
    sum+=c;
    }
    return sum;
    }
    int main()
    {
    int T,cas=0;
    char ch[10];
    scanf("%d",&T);
    while(T--)
    {
    if(cas!=0)
    gets(ch);
    for(int i=0;i<8;i++)
    scanf("%s",g[i]);
    int max1=0,c;
    for(int i=0;i<8;i++)
    {
    for(int j=0;j<8;j++)
    if(g[i][j]=='*')
    {
    c=judge(i,j);
    if(c>max1)
    max1=c;
    }
    }
    printf("Case %d: %d\n",++cas,max1);
    }
    return 0;
    }
  • 相关阅读:
    Pytest框架之命令行参数2
    Pytest框架之命令行参数1
    [编程题] 二维数组中的查找
    [编程题]二叉树镜像
    补充基础:栈与队列模型
    6641. 【GDOI20205.20模拟】Sequence
    瞎讲:任意模数MTT
    瞎讲:FFT三次变二次优化
    小米oj 重拍数组求最大和
    小米oj 有多少个公差为2的等差数列
  • 原文地址:https://www.cnblogs.com/nanke/p/2344739.html
Copyright © 2011-2022 走看看