hdu3368 Reversi

来源:互联网 发布:戴尔面部识别软件 编辑:程序博客网 时间:2024/06/06 04:33

 

题目链接: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;}