枚举法
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int ans;
char map[10][10];
int dir[8][2]={0,1,0,-1,1,0,-1,0,1,1,-1,1,1,-1,-1,-1};
void find(int x,int y)
{
if(map[x][y]!='*')
return ;
int i;
int sum=0;
for(i=0;i<8;i++)
{
int temp=0;
int nx=x,ny=y;
while(1)
{
nx=dir[i][0]+nx;
ny=dir[i][1]+ny;
if(nx<0||nx>=8||ny<0||ny>=8)
break;
if(map[nx][ny]=='*')
break;
if(map[nx][ny]=='L')
temp++;
if(map[nx][ny]=='D')
{
sum+=temp;
break;
}
}
}
if(sum>ans)
ans=sum;
}
int main()
{
int i,j,count=1;
int t;
cin>>t;
while(t--)
{
ans=0;
for(i=0;i<8;i++)
cin>>map[i];
for(i=0;i<8;i++)
for(j=0;j<8;j++)
find(i,j);
printf("Case %d: %d\n",count++,ans);
}
return 0;
}
/*
55
********
********
**D*D*D*
***LLL**
**DL*LD*
***LLL**
**D*D*D*
********
********
********
********
********
********
********
********
********
DDDDDDDD
DDDDDDDD
DDDDDDDD
DDDDDDDD
DDDDDDDD
DDDDDDDD
DDDDDDDD
DDDDDDDD
*LLLLLLL
L*******
L*******
L*******
L*******
L*******
L*******
LLLLLLL*
8
0
0
0
*/