题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3368
代码如下 :
#include<cstdio>
#include<string>
char map[9][9];
int f[9][9];
int maxs;
int dir[8][2]={-1,-1,-1,0,0,-1,-1,1,1,-1,1,0,0,1,1,1};
bool isval(int x,int y)
{
if(x<0||y<0||x>=8||y>=8)return false;
return true;
}
void dfs(int x,int y,int c,int d)
{
int i,j;
if(map[x][y]=='*')
{
// maxs=maxs>c-1? maxs:c-1;
f[x][y]+=c-1;
}
else
{
if(d==8)
{
for(i=0;i<8;i++)
{
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(isval(tx,ty))
if(map[tx][ty]=='L')
dfs(tx,ty,c+1,i);
}
}
else
{
int tx=x+dir[d][0];
int ty=y+dir[d][1];
if(isval(tx,ty))
if(map[tx][ty]=='L'||(c>0&&map[tx][ty]=='*'))
dfs(tx,ty,c+1,d);
}
}
}
int main()
{
int n;
scanf("%d",&n);
int k;
for(k=0;k<n;k++)
{
int i,j;
if(k)getchar();
for(i=0;i<8;i++)
{
getchar();
for(j=0;j<8;j++)
{
scanf("%c",&map[i][j]);
}
}
maxs=0;
memset(f,0,sizeof(f));
for(i=0;i<8;i++)
for(j=0;j<8;j++)
if(map[i][j]=='D')
dfs(i,j,0,8);
for(i=0;i<8;i++)
for(j=0;j<8;j++)
maxs=(maxs<f[i][j] ? f[i][j]: maxs);
printf("Case %d: %d\n",k+1,maxs);
}
return 0;
}