您的位置:首页 > 其它

HDU 3368--搜索

2016-07-26 20:17 309 查看
题意:

给出一个字符矩阵,*代表空白,D代表黑子,L代表白子,问在给出的字符矩阵中,黑子如何下子,使得两个黑子之间包含的白子最

多。

分析:

枚举所有可以下子的点,每个点从8个方向进行寻找每个方向上的下一个黑子,得到该点能翻转的白棋数,比较输出最大的。

代码:

#include <bits/stdc++.h>
using namespace std;
char c[10][10];
int x[8]= {0,1,0,-1,1,-1,1,-1};
int y[8]= {1,0,-1,0,-1,1,1,-1};
int hh,ll;

int Search(int h,int l)
{
int sum=0,num=0;
for(int i=0; i<8; i++)
{
hh=h+x[i];
ll=l+y[i];
num=0;
while(1)
{
if(c[hh][ll]!='L')
break;
num++;
hh+=x[i];
ll+=y[i];
}
if(c[hh][ll]=='D')
sum+=num;
}
return sum;
}

int main()
{
int T,k=1;
while(~scanf("%d",&T))
{
k=1;
for(int i=1; i<=T; i++)
{
for(int i=1; i<=8; i++)
{
for(int j=1; j<=8; j++)
cin >>c[i][j];
}
int maxn=0;
for(int i=1; i<=8; i++)
{
for(int j=1; j<=8; j++)
{
if(c[i][j]=='*')
{
maxn=max(maxn,Search(i,j));
}
}
}
printf("Case %d: %d\n",k++,maxn);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: