• 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;
    }
  • 相关阅读:
    当今优质男人的硬指标15条
    真正爱你的男人
    二十条人生建议
    女孩嫁人前先看看这十句话
    MM拒绝GG求爱的几种方法
    让你受用一生的爱情经典
    男女朋友们的经典称呼
    一道终身受用的测试题
    爱情,你在哪里?
    经典短篇:女人心疼男人的10种方式
  • 原文地址:https://www.cnblogs.com/nanke/p/2344739.html
Copyright © 2020-2023  润新知